除了使用.hgignore之外,我怎么能忽略所有目录?

时间:2010-09-03 15:58:48

标签: mercurial hgignore

我正在使用Mercurial管理$ HOME,以保持我的dotfiles好看和跟踪,或至少对我来说很重要。

但是,〜中的文件和目录数量很多,不需要跟踪,而且这一组不断变化且不断增长。

从历史上看,我已经通过这个.hgignore处理了这个问题:

syntax: glob
*

这样可以保持我的状态干净,只会使之前跟踪的文件可见。但是,我有一些目录(在我的情况下,scripts.emacs.d),我希望看到未跟踪的文件;我几乎总是想跟踪这些目录的新增内容。

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

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:17)

请在.hgignore中尝试此操作:

syntax: regexp

^(?!(scripts|foo|bar)/)[^/]+/
  • ^匹配路径的开头
  • (?!(scripts|foo|bar)使用否定前瞻功能忽略目录scriptsfoobar
  • 中的所有文件
  • /)确保忽略具有跟踪目录作为前缀的目录
  • [^/]+/然后实际匹配任何目录(不包括前瞻规定的目录),以便~中的文件不被忽略

这个解决方案中的中心思想(负面预测)归功于Michael La Voie对this question

的回答

答案 1 :(得分:10)

这个问题已经在这里问过很多次了,你会得到很多复杂的答案,使用零宽度负向前看断言,一个经常被滥用的正则表达式技巧,但更好的解决方案是(a) )只需在该目录中单独创建repo,或者(b)只添加该目录中的文件。对于选项(b),您只需将.*放入.hgignore文件中即可忽略所有内容,然后手动hg add要跟踪的文件。在mercurial中,与svn和cvs不同,您可以使用add覆盖ignore。