2017-04-05 26 views
1
$ git version 
git version 2.9.3.windows.1 

工作,我似乎有與+(一個或多個)中的.gitignore模式匹配的麻煩。這是一個+*的測試,用作文件名中嵌入數字的模式限定符。我想在源代碼控制中保留Test.txt並忽略Test [0-9] + .txt文件。Git的的.gitignore不與一個或多個星號預選賽+

目錄:

$ ll | grep Test 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test123.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test1235.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test124.txt 

的Git忽略文件內容測試1:

Test[0-9]+.txt 

測試1:

$ git status | grep Test 
    Test.txt 
    Test123.txt 
    Test1235.txt 
    Test124.txt 

這應該通過第四文件過濾掉2次。

的Git忽略文件內容,測試2:

Test[0-9]*.txt 

測試2:

$ git status | grep Test 
    Test.txt 

這應該過濾掉所有的文件。

這是怎麼發生的?

回答

1

.gitignore文件正在使用通配符,而不是正則表達式。所以使用+只是無效。

所以你的第二次嘗試實際上更接近你想要的。

Test*.txt 

這將過濾掉開始Test.txt有任何之間結尾的文件。但它也會捕獲Test.txt本身,因爲glob中的*可以是零寬度。

你有什麼可能是最簡單的選擇。

Test[0-9]*.txt 

,將匹配Test其次是任何數字,其次是任何東西(包括無),其次爲.txt

所以這是不完美的,因爲它也將匹配

Test1foo.txt 

其中有非數字文本過去的數字。但是,您的要求具體如何將決定這一點。你也可以添加一些模式,如

Test[0-9].txt 
Test[0-9][0-9].txt 
Test[0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9][0-9].txt 

如果你真的必須確保它的所有數字,然後隨便挑多少位數字,並使用多個條目一樣,使它成爲一個非常特殊的比賽。

2

.gitignore只支持Glob模式而不支持正則表達式。

這是gitignore man page提到:

否則,git treats the pattern as a shell glob suitable for consumption by fnmatch(3)FNM_PATHNAME標誌:在模式通配符不匹配的路徑名/
例如,「Documentation/*.html」與「Documentation/git.html」匹配,但不匹配「Documentation/ppc/ppc.html」或「tools/perf/Documentation/perf.html」。

欲瞭解更多信息,請點擊Glob Patterns vs Regex查看差異。