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

ano*_*ard 67 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
Run Code Online (Sandbox Code Playgroud)

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

我的理解是,一个简单data/*.json的gitignore只会匹配一个目录,因为*它不匹配/,如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文件?

Iva*_*lov 86

我最近写了一篇关于这个问题的帖子.看到这里.

基本上,你需要的是把一个.gitignore*.json/data/目录中.

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

  • 无论`.gitignore`中的内容是什么,都会跟踪以前跟踪的文件 (12认同)

E.M*_*rov 22

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

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

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


Aqi*_*taz 6

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

**/data/**/*.png
**/data/**/*.jpg
Run Code Online (Sandbox Code Playgroud)