我需要一個.hgdontignore文件:-)來包含某些文件並排除目錄中的所有文件。基本上我只想將.jar文件包含在特定的目錄中,而不是其他的。我怎樣才能做到這一點?我不擅長正則表達式語法。或者我可以用glob語法來完成它嗎? (我更喜歡爲了便於閱讀)hgignore:幫助忽略除某些文件外的所有文件
就像一個示例位置,假設我想排除foo/bar/
以外的所有文件,但foo/bar/*.jar
除外。
我需要一個.hgdontignore文件:-)來包含某些文件並排除目錄中的所有文件。基本上我只想將.jar文件包含在特定的目錄中,而不是其他的。我怎樣才能做到這一點?我不擅長正則表達式語法。或者我可以用glob語法來完成它嗎? (我更喜歡爲了便於閱讀)hgignore:幫助忽略除某些文件外的所有文件
就像一個示例位置,假設我想排除foo/bar/
以外的所有文件,但foo/bar/*.jar
除外。
要做到這一點,你需要使用正則表達式:
foo/bar/.+?\.(?!jar).+
說明
你告訴它什麼忽略,所以這個表達式搜索的東西,你不要't想要。
正則表達離子很容易混淆,所以我強烈建議你得到一個像Regex Buddy這樣的工具來幫助你建立它們。它會將正則表達式分解成簡單的英語,這真的有幫助。
編輯
嘿Jason S,你抓住了我,它確實懷念那些文件。
該修正的正則表達式會爲你列出的每個例子的工作:
foo/bar/(?!.*\.jar$).+
它發現:
,但是沒有找到
新解釋
這是說找文件中的「富/酒吧/」,然後如果有零個或多個字符後跟「的.jar」再沒有更多的字符不匹配($表示行的末尾),那麼,如果不是這種情況,則匹配任何後面的字符。
從邁克爾的回答是一個很好的一個,但另一個選擇是隻排除:
foo/bar/**
,然後手動添加.jar文件。您始終可以添加忽略規則排除的文件,並覆蓋忽略。你只需要記住添加你將來創建的任何罐子。
你如何手動添加這些?使用「hg add」添加它們會失敗,因爲將使用忽略文件。使用「hg add -I」添加它們會失敗,因爲忽略文件仍然適用。那麼它們如何被添加覆蓋忽略文件呢? – Mecki 2009-10-20 15:13:21
Mecki,使用'hg add'添加它們可以很好地工作 - 它會覆蓋忽略 - 只要您不在添加行中使用通配符。所以把foo/bar/**放在你的.hgignore裏,然後做'hg add foo/bar/path/specific.file',你就可以走了。如果你有大量的例外添加,你可以將'hg status -u -n foo/bar/lots - *。jar'管道擴展爲'xargs hg add',並批量進行顯式覆蓋。 – 2009-10-20 17:57:07
如果有人會修改foo/bar/path/specific.file,它仍然會被忽略?它不是一個解決方案夥伴 – holms 2011-09-07 12:50:25
whee!謝謝,現在我去嘗試一下。 – 2009-10-02 23:19:44
嗯,好主意,但它不會像所述的那樣工作,因爲它不會匹配沒有任何擴展名的文件。但我認爲我可以將其變成我需要的東西。 'foo/bar /'部分很容易,所以暫時忘掉它。如果你可以修復它,使它匹配文件「baz.txt」,「baz」,「jar」,「baz.jar.txt」,「baz.jar。」,「baz。」和「baz.txt。 「但不是「baz.jar」,那麼我會接受。 :-) – 2010-02-03 16:54:56
嘿傑森,我明白你的意思了。我剛剛用一個正常的正則表達式更新了我的答案。我對您列出的每個字符串進行了測試。 – 2010-02-03 18:51:47