Gitignore仅保留指定子文件夹失效:vendor目录未被Git追踪求助
解决Git无法追踪vendor目录的问题
我之前也碰到过一模一样的情况,核心问题出在Git处理.gitignore规则的逻辑上——当你用*忽略所有内容后,目录本身会被Git判定为已忽略对象,这时候单纯写!vendor或者!vendor/,Git根本不会去扫描这个目录里的内容,自然也就不会追踪它。
正确的.gitignore配置
把web/assets/.gitignore的内容改成下面这样:
* !.gitignore !test.txt !vendor/ !vendor/**
规则解释
*:忽略当前目录下的所有文件和目录!.gitignore:取消忽略自身配置文件!test.txt:取消忽略测试文件!vendor/:关键!先告诉Git不要忽略vendor这个目录本身(必须加斜杠明确是目录)!vendor/**:取消忽略vendor目录下的所有子目录和文件(**是递归匹配所有层级的通配符)
额外操作(如果之前有缓存问题)
如果之前Git已经把vendor目录标记为忽略状态,需要先清除缓存再重新追踪:
git rm -r --cached web/assets/vendor git add web/assets/
验证结果
现在再执行git status web/assets/,就能看到vendor目录里的文件被正常追踪了。另外要注意:Git不会追踪空目录,如果vendor是空的,即使配置正确也不会在状态里显示,需要里面有文件才行。
内容的提问来源于stack exchange,提问作者varpet




