Git指定忽略单个文件异常:Angular5项目误忽略相似文件原因咨询
解析你的.gitignore匹配异常问题
嘿,咱们来拆解一下你遇到的这个.gitignore奇怪现象——这背后其实是Git路径匹配规则的细节,再加上可能存在的隐藏规则干扰!
先搞懂你当前规则的实际作用
你在src/environment目录下的.gitignore里写了/environment.ts,按Git的匹配规则来说:
- 开头带斜杠的模式,如果是放在子目录的.gitignore里,这个斜杠是相对于仓库根目录的,而不是当前子目录。也就是说这条规则本来应该只匹配仓库根目录下的
environment.ts,根本不会管src/environment里的同名文件。 - 那为什么你的
src/environment/environment.ts还是被忽略了?大概率是你搞错了.gitignore的位置(比如其实是写在根目录的.gitignore里),或者之前用git update-index --assume-unchanged标记过这个文件,再或者根目录的.gitignore里还有一条environment.ts的规则在生效。
为什么environment.sample.ts被忽略,environment.prod.ts却没事?
既然/environment.ts本身不该匹配这两个文件,那只有几种可能:
- 存在其他忽略规则:比如根目录的.gitignore里单独写了
environment.sample.ts,或者你的全局Git忽略配置(比如~/.gitignore_global)里有相关规则; - Git缓存的历史遗留:之前
environment.sample.ts被添加到过忽略列表,或者被标记为了assume-unchanged,而environment.prod.ts没有这个历史; - (小概率)文件名大小写问题:如果你用的是Windows系统,Git默认大小写不敏感,要是之前有过类似
Environment.Sample.ts的忽略规则,可能会误匹配,但这种情况很少见。
怎么验证具体原因?
你可以用Git的自带命令来排查哪条规则在起作用:
git check-ignore -v src/environment/environment.sample.ts git check-ignore -v src/environment/environment.prod.ts git check-ignore -v src/environment/environment.ts
这条命令会明确告诉你,每个被忽略的文件是被哪条规则忽略的,以及这条规则在哪个.gitignore文件里。
正确的配置方式
如果你只想忽略src/environment/environment.ts,两种正确写法:
- 在
src/environment/.gitignore里写:environment.ts(去掉开头的斜杠),这样只会匹配当前目录下的这个文件; - 或者在根目录的.gitignore里写:
src/environment/environment.ts(完整的相对路径)。
这样配置后,就只会忽略你目标的文件,不会影响environment.sample.ts和environment.prod.ts啦。
内容的提问来源于stack exchange,提问作者szab.kel
相关产品推荐
相关产品推荐

