git中如何忽略已经提交的文件
git中如何忽略已经提交的文件
问题
在初始化git仓库的时候没有创建.gitignore文件来过滤不必要提交的文件, 后来却发现某些文件不需要提交, 但是这些文件已经被提交了, 这时候创建.gitignore文件忽略这些文件时, 发现ignore的规则对那些已经被track的文件无效[1].
其实.gitignore文件只会忽略那些没有被跟踪的文件, 也就是说ignore规则只对那些在规则建立之后被新创建的新文件生效. 因此推荐: 初始化git项目时就创建.gitignore文件.
那么如何使.gitignore文件的规则对于那些已经被track的文件生效呢 ?
解决方法
你可以参考一下关于此问题的相关讨论==>点这里
这个讨论里面也给出了真正的解决方法[2], 那就是:
1、在.gitignore文件中添加忽略规则
- 在
.gitignore文件中添加ignore条目, 如:some/path/some-file.ext - 提交
.gitignore文件:git commit -a -m "添加ignore规则"
2、备份需要添加至ignore规则的文件(根据个人需求选择是否备份)
3、删除track的文件(已经commit的文件)后,进行一次提交
git rm -rf 要忽略的文件或文件夹或rm -rf 要忽略的文件或文件夹git commit -a -m "删除不需要的文件"-> 若前面使用git rm,此处可直接git commit -m "删除不需要的文件"tip1
4、将备份的文件拉回原路径,然后运行git status命令,确认ignore规则生效 tip2。
5、推送到远程仓库是ignore规则对于其他开发者也能生效: git push [remote]
总结
最好创建git仓库的同时创建.gitignore文件, 并且把忽略规则写好(尽量考虑到所有应该略的文件, 这样就可以避免出现上面的文件啦)
注释
tip1: -r加上后才可删除文件夹
tip2: git rm对比rm命令
git rm等价于rm+git add[3]git rm提供了仓库中操作时的备份功能如:git rm -f效果同于rm -f+git addgit rm --cached命令中,--cached的效果等同于解决方法 中第2,以及第4个步骤效果结合的备份作用(当然,还带有git add的效果),即文件脱离track的同时,实际文件并没有真的删除。而rm命令无此功能项。- 因此,若不想删除实际文件(需要备份),则直接使用
git rm --cached命令,可以免去此过程中用rm命令前必须的手动备份操作。
参考
[1] git如何忽略已经提交的文件 (.gitignore文件无效)
[2] git忽略已经被提交的文件
[3] rm 和 git rm 的区别
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 道远日暮时不存!

.png)