情景描述
- 我们创建了一个project,并且将project全部push到了远端。
- 此时突然发现自己把
.idea
类似于这样的文件都push到了远端,赶紧创建.gitignore
文件 - 将对应路径下的文件加入到
.gitignore
,然后将.idea
直接添加到.gitignore
中 - 然后发现问题:
- 在IDEA中
.idea
没有变灰(这个是否变灰一般是我用判断文件是否被ignore的标准,这个我后面要自我检讨) - 提交新改变的
.gitignore
文件后发现远端还是有.idea
,但是在IDEA中看到这个文件已经变灰了 - 好在现在你再向
.idea
文件中添加东西已经不会出现在被untracked的提示中了 -
.idea
仍然还躺在git仓库中 - 修改已经提交到仓库中的.idea中的文件当你
gst
的时候,仍然发下modify出现在Changes not staged for commit
的提示中
- 在IDEA中
思路梳理
以下是我通过自己验证之后的结论:
- 已经提交到远端的代码已经没有办法被ignore,但是如果在这之后,ignore这个文件夹,其中的新创建的文件是不会提交的远端的。
- 在ignore之前提交到远端的文件,ignore之后如果对他修改,git依旧会追踪,这就是我们经常发现的:.gitignore中明明添加了某个文件,但是他的修改git依旧追踪,如同.gitignore无法ignore它的原因。
- Q1:那么我想要将已经提交的远端的文件ignore掉,该用什么办法呢?
- A1:可以采用
git rm
的方法,使用git rm --cached <文件名>
或者git rm -r --cached <文件夹名>
然后提交你的rm修改,就可以发现远端没有这个文件了
反思
- 之前对文件是否
.gitignore
某个文件的判断依据就是这个文件/文件夹是否变灰了,这是个大禁忌,能够变灰是IDEA中git插件中提供的功能,如果没有插件了,这并不能作为判断依据。我们要做的是看本质并不是现象,这里的本质是他有没有达到我想让他有的功能,比如:新创建的文件不会提交repo、修改的文件不会被监控等等,而不是光看文件颜色。但是在这里没有变灰色的原因:我猜想是因为你在.gitignore
添加了这个文件之后还没提交修改,一旦将修改push远端,颜色立刻就会改变(?是否变灰是IDEA提供的功能,因此该功能受到IDEA监控,因此添加文件后,IDEA本身没有及时更新也会出现这样的问题,因此颜色判断一定是最差的判断方式)