【发布时间】:2014-04-26 03:36:25
【问题描述】:
我使用 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,我尝试了以下 .hgignores:
syntax: regexp
^(?!(/src/).)/target$
(如果有文件夹名为src,则不匹配,但如果有target 文件夹,则匹配)
和
syntax: regexp
^[^/]*/(?!(/src/).)*[^/]*/target$
(某些文件夹,如果任何文件夹命名为src,则不匹配,然后是其他一些文件夹,然后是target 文件夹)。
但是这两个.hgignores 都不起作用,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 得到了关于正则表达式语法的想法。
附:我知道我可以hg add.hgignore 排除的文件,我已经做到了。但这是临时措施。
【问题讨论】:
-
旁注:我发现了为什么我的正则表达式没有效果。我的
.hgignore的某处显然有syntax: glob */target/**。如果没有该行,它们将允许target文件夹中的任何内容,这也是不正确的。
标签: java regex mercurial hgignore