我使用Mercurial并为具有多个子模块的项目提供标准的Maven布局,例如:
submodule1/src/main/java/xyz/.../
submodule1/src/main/java/xyz/.../target/Target.java
submodule1/src/test/java/xyz/.../target/TargetTest.java
submodule1/target/classes/xyz/.../target/Target.class
submodule1/target/something_else...
submodule2/...
etc...
要从SCM中排除所有target
个文件夹,除非target
位于src
下,例如submodule1/src/main/java/xyz/.../target/Target.java
,我尝试了以下.hgignore
s:< / p>
syntax: regexp
^(?!(/src/).)/target$
(如果任何文件夹名为src
,则不匹配,但如果有target
文件夹则匹配)
和
syntax: regexp
^[^/]*/(?!(/src/).)*[^/]*/target$
(某些文件夹,如果任何文件夹名为src
,则不匹配,然后是其他一些文件夹,然后是target
文件夹)。
但这两个.hgignore
都不起作用,submodule1/src/main/java/xyz/.../target
文件夹仍然被排除在外,还有其他target
文件夹。
以前,我只是忽略了直接位于子模块文件夹中的target
来解决这个问题,例如。
syntax: regexp
^submodule1/target$
但子模块太多,每次添加子模块时都需要编辑.hgignore
。
我从.hgignore file is not ignoring the maven target/site directory和hgignore: help ignoring all files but certain ones获得了regexp语法的提示。
P.S。我知道我可以hg add
.hgignore
{{1}}排除的文件,我就是这么做的。但这是一个临时措施。
答案 0 :(得分:0)
这是一种方式。它只标识/ target /,它不是/ src /
的子目录 # "^(?=.*/target/)(?!(?:(?!/src/|/target/).)*/src/.*(?<=/)target/)"
^ # BOS
(?= .* /target/ ) # Contains /target/,
(?! # But, does not contain /src/ .. /target/
(?:
(?! /src/ | /target/ )
.
)*
/src/ .* (?<= / ) target/
)