代码之家  ›  专栏  ›  技术社区  ›  Chris R

如何忽略除使用.hgignore的目录外的所有目录?

  •  14
  • Chris R  · 技术社区  · 14 年前

    我正在使用mercurial管理$home,以保持我的点文件的良好性和跟踪性,或者至少是那些对我很重要的点文件。

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

    从历史上看,我是通过这个来处理这个问题的。

    syntax: glob
    *
    

    这样就可以保持我的状态整洁,只显示以前跟踪的文件。但是,我有一些目录(在我的例子中, scripts , .emacs.d )我想看到未跟踪的文件;我几乎 总是 希望跟踪这些目录中新添加的内容。

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

    有办法吗?

    2 回复  |  直到 14 年前
        1
  •  17
  •   Community CDub    8 年前

    试试这个 .hgignore 而是:

    syntax: regexp
    
    ^(?!(scripts|foo|bar)/)[^/]+/
    
    • ^ 匹配路径开头
    • (?!(scripts|foo|bar) 使用负先行忽略目录中的文件以外的所有文件 scripts , foo bar
    • /) 确保忽略以跟踪目录作为前缀的目录
    • [^/]+/ 然后实际匹配任何目录(不包括lookahead排除的目录),以便 ~ 不被忽视

    这个解决方案的核心思想(负面展望)归功于迈克尔·拉瓦伊对 this question

        2
  •  10
  •   Ry4an Brase    14 年前

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