Git-忽略子目录中的某些文件,但不是全部

时间:2011-07-22 18:53:51

标签: git gitignore

我的结构类似于以下内容:

/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文件?

3 个答案:

答案 0 :(得分:81)

我最近写了一篇关于这个问题的帖子。请参阅here

基本上您需要的是将.gitignore *.json放在/data/目录中。

UPD :由于git 1.8.41.8.2如果您正在使用msysgit),可以使用双星模式,例如/data/**/*.json

答案 1 :(得分:20)

您可以将data/**/*.json放在.gitignore /root目录中,以防止不同目录中的多个.gitignore文件

**/ - 匹配任何子目录(包括当前)

示例:data/**/*.json记录将忽略data/1.jsondata/subfolder/2.jsondata/../../3.json

答案 2 :(得分:1)

此模式适用于数据子文件夹,仅忽略png和jpg文件:

**/data/**/*.png
**/data/**/*.jpg