为何.gitignore中/foo/*规则会忽略foo/bar/hello.c文件?
为什么
/foo/*会忽略foo/bar/hello.c 核心原因是Git会跳过所有被标记为忽略的目录,不会遍历其中的内容,具体逻辑如下:
- 你的
.gitignore规则/foo/*会匹配foo目录下的所有直接子项,包括test.json文件和bar目录。 - 当Git识别到
bar目录被忽略后,它不会再进入该目录扫描内部文件,因此bar/hello.c完全不会被Git处理,表现出来就是被忽略了。 - 这和规则本身不匹配
foo/bar/hello.c并不矛盾——规则是匹配了父目录bar,间接导致了子文件被忽略。
如果需要让bar目录下的文件被追踪,可以修改.gitignore规则:
/foo/* !/foo/bar/
先忽略foo下的所有内容,再通过!排除bar目录,Git就会正常遍历bar目录并处理其中的文件了。
内容的提问来源于stack exchange,提问作者sonooby
相关产品推荐
相关产品推荐

