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


75

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

/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将模式视为适合Fnmatch(3)使用FNM_PATHNAME标志使用的shell全局变量:模式中的通配符将与路径名中的/不匹配。例如,“ Documentation / *。html”匹配“ Documentation / git.html”,但不匹配“ Documentation / ppc / ppc.html”或“ tools / perf / Documentation / perf.html”。

有没有一种简单的方法可以执行此操作,或者我需要在每个子目录中明确地主动添加gitignore文件?


Answers:


94

我最近写了一篇有关此类问题的文章。看这里

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

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


我添加了.gitignore包含的文件,*.json但是如果我更改其中一个文件并运行git status,我会看到它们列为“未暂存的更改”。请.gitignore需要的文件生效之前所犯的?这是因为先前已跟踪文件而显示的吗?
匿名co

14
无论以前在哪里,都将跟踪以前跟踪的文件.gitignore
Ivan Danilov

23

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

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

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


@CaptainBlammo我正在使用它,它起作用了,可能是您做错了什么?有信息:一些文档
E.Monogarov

1
也会忽略/bla/data/**/*.json/bla/bla/data/**/*.json/data/**/*.json应该使用。
Onur Demir

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.