是否忽略Mercurial中特定文件类型中的一个或多个文件以外的所有文件?
与相同的问题,但适用于Mercurial 我希望是否忽略Mercurial中特定文件类型中的一个或多个文件以外的所有文件?,mercurial,hgignore,Mercurial,Hgignore,与相同的问题,但适用于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 我只希望包含以下文件(包括目录结构): (是否创建包含h.png的目录并不重要。) 我尝试过应用和更改上述问题中提到的相同原则(但改用Mer
.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
我只希望包含以下文件(包括目录结构):
(是否创建包含h.png
的目录并不重要。)
我尝试过应用和更改上述问题中提到的相同原则(但改用Mercurial),以及尝试应用问题中的原则,但没有任何运气
编辑:我尝试了上面提到的目录树
$ 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}”
。如果忽略的模式是可计数的,为什么不使用glob模式列表?在您忽略repo树中所有*.class和*.java(如果我正确理解任务)的情况下,hgrc将
syntax: glob
**.class
**.java
如果您想忽略所有扩展名很多(或可能完全未知)的文件,除了一些扩展名,您可以尝试在文件定义中使用文件集(hg help filesets
)。忽略除*.png以外的所有扩展名将是smth。比如(TBT!)
试试这个:
syntax: regexp
.*\.(?!java$|class$)
或者更好:
syntax: regexp
.*\.(?!java$|.*\.java$|class$|.*\.class$)
这也将匹配像“a..java”或“a.java.java”这样的奇怪东西
编辑:这里有一个修订的解决方案,包含了瑟伦的技巧和我的一些进一步调整。我希望这些误报(例如“ajava”或“java”之类的内容没有被忽略)现在得到修复
syntax: regexp
\.(?!java$|class$)[^.]+$
(?<!\.)java$
(?<!\.)class$
语法:regexp
\.(?!java$| class$)[^。]+$
(?将第一个代码段放入my.hgrc
中会做什么?仅接受Dos文件?该文件是否应位于我的工作目录中?首先.hgrc示例将有效忽略(对于所有与回购相关的操作)整个repo树上有两个文件扩展名。所有其他文件扩展名都将被监视并检测到更改。.hgrc通常是版本控制的文件,放在repo的根目录中。我想你误解了我的问题(或者我误解了你的答案)。我想忽略除上述文件之外的所有文件。您的第一个示例描述的与我想做的相反。此外,我可能会使用文件集中的一些选项,然后使用类似于hg add“set:not*.class,not*.java”的内容
,只允许添加这些文件扩展名,但如果可能的话,最好将该选项添加到我当前项目的.hgignore
文件中。感谢您迄今为止的帮助!忽略除.hgignore中的两个扩展名以外的所有扩展名将(我想,TBT)“设置:not**.class而不是**.java”提示:您不需要领先的*
(Mercurial进行搜索
,而不是匹配
)。处理“奇怪的东西”的更好方法是。(?!java$| class$)[^.]+$
-也就是说,在拒绝java
和类
(因此不要忽略它们)之后,请确保我们实际上正在查看文件扩展名([^.]+$
),而不是文件名的早期部分。最后,您需要一个单独的^[^.]+$
行来忽略没有扩展名的文件。@Søren感谢您的提示。但是添加了行^[^.]+$
使mercurial忽略子文件夹中的文本文件。嗯,这一点很好。这是因为mercurial将忽略模式应用于目录和文件,并且因为目录没有“.java”或“.class”我想,假设没有扩展名的路径是目录,这可能是使用正则表达式区分文件和目录最接近的方法。
syntax: regexp
.*\.(?!java$|.*\.java$|class$|.*\.class$)
syntax: regexp
\.(?!java$|class$)[^.]+$
(?<!\.)java$
(?<!\.)class$