Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否忽略Mercurial中特定文件类型中的一个或多个文件以外的所有文件?_Mercurial_Hgignore - Fatal编程技术网

是否忽略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

与相同的问题,但适用于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
的目录并不重要。)

我尝试过应用和更改上述问题中提到的相同原则(但改用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$