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 add
git 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 许可协议。转载请注明来自 道远日暮时不存!