与gitignore: Ignore all files in folder hierarchy except one specific filetype相同的问题,但对于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而言),以及尝试应用问题How can I ignore all directories except one using .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}"
(以及类似查询)创建应用add
的{{1}}或配置文件?
答案 0 :(得分: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$
答案 1 :(得分:0)
如果忽略模式是可数的,为什么不使用glob模式列表呢?在你的情况下忽略repo-tree中的所有* .class和* .java(如果我理解正确的任务).hgrc将是
syntax: glob
**.class
**.java
如果要忽略所有具有大量(或可能未知)扩展名的文件,除了一些扩展名,您可以尝试在文件定义中使用文件集(hg help filesets
)。忽略除了* .png之外的所有扩展名都将是smth。喜欢(TBT!)
"set:not **.png"