与gitignore相同的问题:忽略文件夹层次结构中的所有文件,除了一个特定的文件类型,但对于Mercurial。
我想要.hgignore
忽略所有文件,除了一个或多个特定文件类型的文件,例如,只允许在当前目录和子目录中跟踪*.java
和*.class
文件类型的文件。
例如,在以下目录中:
A.java
a.txt
a.png
A.class
B/C.java
B/G/H/h.png
B/C.class
D/E/F.java
我只想包含以下文件(包括目录的结构):
A.java
A.class
B/C.java
B/C.class
D/E/F.java
(是否创建包含h.png
的目录无关)
我已经尝试应用和更改上述问题中提到的相同原则(但对于Mercurial),以及尝试应用问题中的原则,我如何能够忽略除使用.hgignore的目录外的所有目录?
编辑:我用上面提到的目录树尝试了以下操作
$ hg stat
? A.class
? A.java
? B/C.class
? B/C.java
? B/G/H/h.png
? D/E/F.java
? a.png
? a.txt
$ hg add -I "**.{class, java}"
adding A.class
adding A.java
adding B/C.class
adding B/C.java
adding D/E/F.java
给了我想要的结果。如何创建.hgignore
或配置文件,为每个add
或commit
(以及类似的查询)应用-I "**.{class, java}"
?
试试这个:
syntax: regexp
.*.(?!java$|class$)
或者更好:
syntax: regexp
.*.(?!java$|.*.java$|class$|.*.class$)
也会匹配像"a..java"或". java.java"这样奇怪的东西。
编辑:这是一个修改后的解决方案,结合了Søren的技巧和我的一些进一步的调整。我希望误报,例如,像"ajava"或"java"没有被忽略,现在被修复。
syntax: regexp
.(?!java$|class$)[^.]+$
(?<!.)java$
(?<!.)class$
如果被忽略的模式是可数的,为什么不使用全局模式列表呢?在你的情况下,忽略所有的仓库树*.class和*.java(如果我理解正确的任务)。hgrc将是
syntax: glob
**.class
**.java
如果您想忽略所有具有大量(或可能根本未知)扩展名的文件,除了一些,您可以尝试在文件定义中使用文件集(hg help filesets
)。忽略除*.png以外的所有扩展名将是smith。像(TBT)
"set:not **.png"