2014-03-19 43 views
3

我使用水銀,並有我的項目標準的Maven佈局幾個子模塊,如:.hgignore「目標」也有一些例外的文件夾

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文件夾除非targetsrc下例如,submodule1/src/main/java/xyz/.../target/Target.java,我嘗試以下.hgignore S:

如果任何文件夾命名爲 src
syntax: regexp 
^(?!(/src/).)/target$ 

(不匹配,但匹配,如果有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 directoryhgignore: help ignoring all files but certain ones得到了正則表達式語法的想法。

P.S.我知道我可以通過.hgignore排除文件hg add,我已經完成了這一步。但這是一個臨時措施。

+0

邊注:我發現了,爲什麼我的正則表達式沒有任何影響。我顯然在''.hgignore'的某處有'syntax:glob */target/**'。如果沒有這一行,它們允許任何地方的'target'文件夾中的任何內容,這也是不正確的。 – nvamelichev

回答

0

這是一種方法。它只是識別/目標/的是不是一個子目錄/ src目錄/

# "^(?=.*/target/)(?!(?:(?!/src/|/target/).)*/src/.*(?<=/)target/)" 

^         # BOS 
(?= .* /target/)     # Contains /target/, 
(?!        # But, does not contain /src/ .. /target/ 
     (?: 
      (?! /src/ | /target/) 
      . 
    )* 
     /src/ .* (?<= /) target/ 
) 
+0

非常感謝!我縮短了一些正則表達式,用普通的'()'替換了非捕獲的'(?:)'。這樣看起來有點嚇人:'^(?=。*/target /)(?!((?!/ src/|/target /).)*/ src /.*(?<=/)target /)':-) – nvamelichev

+0

不是問題,祝你好運! – sln

相關問題