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/...”路径下的 任何 .json文件,但是“/data/”有时包含子目录。

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

否则,git 将模式视为一个 shell globb,适合使用带有 FNM _ PATHNAME 标志的 fnmatch (3) : 模式中的通配符不会与路径名中的 a/匹配。例如,「文件/* 。Html”匹配“文档/git.html”,但不匹配“文档/ppc/ppc.html”或“ tools/perf/Document/Perf.html”。

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

81797 次浏览

I've written a post about such problem recently. See here.

Basically what you need is to put one .gitignore with *.json in the /data/ directory.

UPD: Since git 1.8.4 (1.8.2 if you're using msysgit) it is possible to use double-star patterns, like /data/**/*.json

you can place data/**/*.json in your .gitignore in /root directory to prevent multiple .gitignore files in different directories

**/ - matches any count of subdirectories (including current)

example: data/**/*.json record will ignore data/1.json, data/subfolder/2.json, data/../../3.json

This pattern work for me for data subfolder ignoring only png and jpg files:

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