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 

我想让git忽略'/ data / …'path下的任何 .json文件,但'/ data /'有时包含子目录。

我的理解是,gitignore中的一个简单的data/*.json 。json将只匹配一个目录,因为*不匹配/ ,如http://git-scm.com/docs/gitignore所述 ,“模式格式”,子弹#6:

否则,git把这个​​模式当作一个适合fnmatch(3)用FNM_PATHNAME标志消费的shell glob:模式中的通配符不会匹配path名中的/。 例如,“Documentation / *。html”匹配“Documentation / git.html”,但不匹配“Documentation / ppc / ppc.html”或“tools / perf / Documentation / perf.html”。

有没有一个简单的方法来做到这一点,或者我需要明确地在每个子目录中主动添加gitignore文件?

我最近写了一篇关于这个问题的文章。 看到这里 。

基本上你需要的是把一个.gitignore*.json放在/data/目录下。

UPD :由于git 1.8.4 ( 1.8.2,如果你使用的是msysgit),可以使用双星模式,比如/data/**/*.json

你可以在你的.gitignore/root目录下放置data/**/*.json .gitignore ,以防止在不同目录下有多个.gitignore文件

**/ – 匹配任何数量的子目录(包括当前)

例如: data/**/*.json data/1.jsonlogging将忽略data/1.jsondata/subfolder/2.jsondata/../../3.json