在使用 git进行版本控制的过程中发现的问题,将想被忽略的文件(文件夹)配置到.gitignore文件中后,实际修改了想被忽略的文件,调用git status查看时,仍然会提示提交这些文件。也就是说实际并没有被忽略?
git ignore只会对不在git仓库中的文件进行忽略,如果这些文件已经在git仓库中,则不会忽略。所以如果需要忽略的文件已经提交到本地仓库,则需要从本地仓库中删除掉,如果已经提交到远端仓库,则需要从远端仓库中删除。删除.gitignore文件才能实际生效。
也就是说.gitignore 文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
有一点需要注意的,git rm --cached 删除的是追踪状态,而不是物理文件;如果文件也不要了,可以直接 rm+忽略+提交。
解决步骤:
git rm -r --cached 要忽略的文件 (如: git rm -r --cahced build/*, 如修改列表中的内容全部是不需要的, 那么你可以使用最最简单的命令搞定git rm -r --cached .)
git add .
git commit -m " commit ....."
git push
push之后其他开发人员pull之后, ignore规则就对其生效了.
注意上传到gitlab中的文件需要手动删除,下次push或pull之后ignore文件便可生效。
解决方案: 1. 首先确定要忽略的文件/路径是否已经被Git跟踪管理,如果是,则无法直接在.gitignore文件中配置忽略,需先将文件/路径从Git仓库中删除; 2. 可以使用以下命令将想要忽略的文件/路径从Git仓库中删除:
git rm -r --cached 文件/路径
其中,--cached
表示只从Git缓存中删除,不删除本地文件/路径; 3. 然后进行commit和push操作,将这个删除动作同步到远程仓库; 4. 在完成上述步骤后,在.gitignore文件中添加要忽略的文件/路径; 5. 现在再次进行commit和push操作,这时将不再包含要忽略的文件/路径。
如果想要忽略已被Git跟踪管理的文件,需要先执行上述步骤1-3删除文件,然后再执行具体的忽略操作。具体可参考参考资料中的方法3。
注意事项: - 直接修改.gitignore文件不会生效,必须执行以上步骤删除缓存等操作后才能生效; - 在.gitignore文件中添加要忽略的文件/路径时,建议将该文件/路径的上一层目录也都添加到忽略列表中,避免误上传其他文件。
参考代码:
# 删除要忽略的文件/路径
git rm -r --cached 文件/路径
# 提交到本地仓库
git commit -m "删除文件/路径"
# 推送到远程仓库
git push
# 添加忽略文件/路径到.gitignore
echo "文件/路径" >> .gitignore
# 提交到本地仓库
git commit -m "添加.gitignore"
# 推送到远程仓库
git push