【问题标题】:Is there a way to select what I want in hg, not ignore what I don't want有没有办法在 hg 中选择我想要的,而不是忽略我不想要的
【发布时间】:2012-05-07 08:29:37
【问题描述】:

我知道 Hg 的忽略很有用,但是有没有一种方法可以指定我关心的文件,而忽略其余的,例如。

如果我在 repo 中有 a.c, a.h, a.o, a.exe, a.err,有什么方法可以告诉 Hg,我只想保留 *.c *.h 并忽略不在列表中的所有内容。

【问题讨论】:

标签: version-control mercurial tortoisehg


【解决方案1】:

嘿,@vonC 是对的,我不能放过这个。没有办法将 hgignore 变成白名单而不是黑名单。我认为这是有意设计的(当然不是我设计的)。

你有几个选择:

  1. 所有内容 (.*) 添加到您的.hgignore,然后添加到您要跟踪的hg add 文件中——添加始终覆盖忽略

  2. 只需分解并制作一个适当的黑名单:hg status --no-status --unknown >> .hgignore 是一个很好的起点。

最重要的是,意外跟踪您不想跟踪的内容比不小心忘记跟踪您希望跟踪的内容更危险。前者会在您的 repo 中产生一点噪音,而后者会导致潜在的数据丢失。

如果您真的想变得花哨,可以将“.*”添加到您的.hgignore,然后像这样创建一个钩子:

[hooks]
precommit.add = hg add $(hg status --unknown --no-status -I '**.c' -I '**.h')

它会在您提交时自动添加任何新的 .c 和 .h 文件。

【讨论】:

  • [hooks] 是 hg 的插件吗?
  • 顺便说一句,*.c**.c 有什么区别,尽管这是另一个问题:)
  • 不,挂钩是内置功能。试试man hgrc 或阅读 Mercurial 书的第 10 章以获得解释。 **.c 在所有路径中都包含 *.c。简而言之,* 匹配除斜线以外的任何内容,** 匹配 任何内容
  • 它对我不起作用。我认为钩子应该是pre-commit,如@Ry4an 在this answer 中所说的那样,--unknown 选项应该是--ignored,因为被忽略的文件是已知的。所以代码可能是pre-commit.add = hg add $(hg status --ignored --no-status -I '**.c' -I '**.h')
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2015-04-24
相关资源
最近更新 更多