2011-07-22 80 views
45

我有類似下面這樣的結構:針對Git忽略某些文件的子目錄,但不是所有

/root/ 
/root/data/ 
/root/data/script.php 
/root/data/some.json 
/root/data/feature/one.json 
/root/data/feature/two.json 
/root/data/other-feature/one.json 
/root/data/other-feature/important-script.php 

我想混帳忽略「/數據下任何.json文件/ ...'路徑,但'/ data /'有時包含子目錄。

我的理解是,在gitignore簡單data/*.json將只匹配一個目錄,爲*不匹配/,截至http://git-scm.com/docs/gitignore表示,「模式格式」,子彈#6:

否則, git將模式視爲適合fnmatch(3)使用FNM_PATHNAME標誌使用的shell glob:模式中的通配符不會與路徑名中的/匹配。例如,「Documentation/*。html」與「Documentation/git.html」匹配,但不匹配「Documentation/ppc/ppc.html」或「tools/perf/Documentation/perf.html」。

是否有一個簡單的方法來做到這一點,或者我是否需要明確地在每個子目錄中主動添加gitignore文件?

+0

最最新的答案就在這裏:http://stackoverflow.com/a/10714272/176877 –

回答

58

最近我寫了一篇關於這個問題的文章。見here

基本上你需要的是將一個.gitignore*.json放在/data/目錄下。

UPD:由於git的1.8.41.8.2如果你使用msysgit),可以使用雙星模式,如/data/**/*.json

+0

我添加了'.gitignore'文件,其中包含'*。 json',但是如果我更改其中一個文件,並運行'git status',我會將它們列爲「更改未暫存」。 '.gitignore'文件在生效之前需要提交嗎?這是因爲之前跟蹤過的文件而顯示的嗎? –

+8

無論「.gitignore」中有什麼內容,都會跟蹤之前跟蹤的文件。 –

+0

明白了。謝謝! –

14

您可以將data/**/*.json.gitignore/root目錄,以防止多個.gitignore在不同的目錄

**/文件 - 匹配子目錄中的任何數(包括電流)

例如:data/**/*.json記錄將忽略data/1.jsondata/subfolder/2.jsondata/../../3.json

+0

@CaptainBlammo我使用它,它的工作原理,可能是你做錯了什麼? 有信息:[some docs](http://git-scm.com/docs/gitignore) –

相關問題