忽略Mercurial中特定文件类型中的一个或多个文件以外的所有文件



与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或配置文件,为每个addcommit(以及类似的查询)应用-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"

相关内容

  • 没有找到相关文章

最新更新