我的结构类似于以下内容:
/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忽略 {/ etc / ...'路径下的任何 .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 :(得分:81)
我最近写了一篇关于这个问题的帖子。请参阅here。
基本上您需要的是将.gitignore
*.json
放在/data/
目录中。
UPD :由于git 1.8.4(1.8.2如果您正在使用msysgit),可以使用双星模式,例如/data/**/*.json
答案 1 :(得分:20)
您可以将data/**/*.json
放在.gitignore
/root
目录中,以防止不同目录中的多个.gitignore
文件
**/
- 匹配任何子目录(包括当前)
示例:data/**/*.json
记录将忽略data/1.json
,data/subfolder/2.json
,data/../../3.json
答案 2 :(得分:1)
此模式适用于数据子文件夹,仅忽略png和jpg文件:
**/data/**/*.png
**/data/**/*.jpg