Git忽略子目录中的某些文件,但不是所有文件

Git忽略子目录中的某些文件,但不是所有文件,git,gitignore,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忽略“/data/…”路径下的任何.json文件,但是“/data/

我的结构与以下类似:

/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/”有时包含子目录

我的理解是,gitignore中的一个简单的
data/*.json
将只匹配一个目录,因为
*
/
不匹配,如“模式格式”,bullet 6:

否则,git将模式视为适合fnmatch(3)使用的shell glob,并带有FNM_路径名标志:模式中的通配符将与路径名中的/不匹配。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”


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

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

基本上,您需要在
/data/
目录中放置一个带有
*.json
.gitignore


UPD:由于git(如果您使用的是msysgit),因此可以使用双星模式,如
/data/***/.json

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

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


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

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

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

我添加了
.gitignore
文件,其中包含
*.json
,但是如果我更改其中一个文件,并运行
git status
,我会看到它们列为“更改未暂存”。
.gitignore
文件在生效前是否需要提交?出现这种情况是因为以前跟踪过文件吗?以前跟踪过的文件将被跟踪,无论
中有什么内容。gitignore
最新的答案是:@CaptainBlammo我在使用它,它有效,可能是你做错了什么?有信息:它还将忽略
/bla/data/***.json
/bla/bla/data/***.json
<代码>/data/***。应使用json