15

我正在使用 Mercurial 管理 $HOME,以使我的 dotfiles 保持良好和跟踪,或者至少是对我重要的那些。

但是, ~ 中有大量不需要跟踪的文件和目录,并且该集合不断变化且不断增长。

从历史上看,我通过拥有这个 .hgignore 来处理这个问题:

syntax: glob
*

就目前而言,这使我的状态保持干净,仅使以前跟踪的文件可见。但是,我有一些目录(在我的情况下是scripts, .emacs.d),我想在其中查看未跟踪的文件;我几乎总是想跟踪这些目录的新增内容。

我知道我可以运行hg st -u scripts以识别未跟踪的文件,但我想要一种方法,我可以使用普通的 ole hg 状态实现相同的功能。

有没有办法做到这一点?

4

2 回答 2

18

试试这个.hgignore

syntax: regexp

^(?!(scripts|foo|bar)/)[^/]+/
  • ^匹配路径的开始
  • (?!(scripts|foo|bar)使用负前瞻来忽略除目录中的文件之外的所有文件scriptsfoobar
  • /)确保忽略具有跟踪目录作为前缀的目录
  • [^/]+/然后实际上匹配任何目录(不包括由前瞻排除的目录),因此~不会忽略其中的文件

此解决方案中的中心思想(否定前瞻)归功于 Michael La Voie 对这个问题的回答

于 2010-09-03T19:41:05.963 回答
11

这个问题已经在这里问了很多次了,你会得到很多令人费解的答案,使用零宽度否定前瞻断言,一个经常被滥用的正则表达式技巧,但更好的解决方案是(a)只是仅在该目录中的存储库或(b)仅在该目录中添加文件。对于选项 (b),您只需放入.*文件.hgignore以忽略所有内容,然后手动hg add输入要跟踪的文件。在 mercurial 中,与 svn 和 cvs 不同,您可以使用 add 覆盖忽略。

于 2010-09-03T20:09:54.823 回答