3

与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或配置文件来应用-I "**.{class, java}"每个addcommit(和类似的查询)?

4

2 回答 2

3

尝试这个:

syntax: regexp
.*\.(?!java$|class$)

或者更好:

syntax: regexp
.*\.(?!java$|.*\.java$|class$|.*\.class$)

这也将匹配奇怪的东西,如“a..java”或“a.java.java”。

编辑:这是一个修改后的解决方案,结合了 Søren 的提示和我的一些进一步调整。我希望误报,例如“ajava”或“java”之类的东西没有被忽略,现在得到修复。

syntax: regexp
\.(?!java$|class$)[^.]+$
(?<!\.)java$
(?<!\.)class$
于 2012-10-27T22:28:37.550 回答
0

如果忽略的模式是可数的,为什么不使用全局模式列表呢?在您忽略回购树中所有 *.class 和 *.java 的情况下(如果我正确理解任务) .hgrc 将是

syntax: glob

**.class
**.java

如果您想忽略所有具有很多(或可能根本未知)扩展名的文件,除了一些您可以尝试hg help filesets在文件定义中使用文件集()。对于您的情况,忽略除 *.png 之外的所有扩展名将是smth。喜欢(TBT!)

"set:not **.png"
于 2011-11-10T13:22:38.717 回答