情景描述
- 我們創(chuàng)建了一個project佛嬉,并且將project全部push到了遠端描扯。
- 此時突然發(fā)現(xiàn)自己把
.idea
類似于這樣的文件都push到了遠端罚渐,趕緊創(chuàng)建.gitignore
文件 - 將對應(yīng)路徑下的文件加入到
.gitignore
序矩,然后將.idea
直接添加到.gitignore
中 - 然后發(fā)現(xiàn)問題:
- 在IDEA中
.idea
沒有變灰(這個是否變灰一般是我用判斷文件是否被ignore的標準婴栽,這個我后面要自我檢討) - 提交新改變的
.gitignore
文件后發(fā)現(xiàn)遠端還是有.idea
,但是在IDEA中看到這個文件已經(jīng)變灰了 - 好在現(xiàn)在你再向
.idea
文件中添加東西已經(jīng)不會出現(xiàn)在被untracked的提示中了 -
.idea
仍然還躺在git倉庫中 - 修改已經(jīng)提交到倉庫中的.idea中的文件當你
gst
的時候爱谁,仍然發(fā)下modify出現(xiàn)在Changes not staged for commit
的提示中
- 在IDEA中
思路梳理
以下是我通過自己驗證之后的結(jié)論:
- 已經(jīng)提交到遠端的代碼已經(jīng)沒有辦法被ignore晒喷,但是如果在這之后,ignore這個文件夾访敌,其中的新創(chuàng)建的文件是不會提交的遠端的凉敲。
- 在ignore之前提交到遠端的文件,ignore之后如果對他修改,git依舊會追蹤爷抓,這就是我們經(jīng)常發(fā)現(xiàn)的:.gitignore中明明添加了某個文件势决,但是他的修改git依舊追蹤,如同.gitignore無法ignore它的原因蓝撇。
- Q1:那么我想要將已經(jīng)提交的遠端的文件ignore掉果复,該用什么辦法呢?
- A1:可以采用
git rm
的方法渤昌,使用git rm --cached <文件名>
或者git rm -r --cached <文件夾名>
然后提交你的rm修改虽抄,就可以發(fā)現(xiàn)遠端沒有這個文件了
反思
- 之前對文件是否
.gitignore
某個文件的判斷依據(jù)就是這個文件/文件夾是否變灰了,這是個大禁忌独柑,能夠變灰是IDEA中g(shù)it插件中提供的功能迈窟,如果沒有插件了,這并不能作為判斷依據(jù)忌栅。我們要做的是看本質(zhì)并不是現(xiàn)象车酣,這里的本質(zhì)是他有沒有達到我想讓他有的功能,比如:新創(chuàng)建的文件不會提交repo索绪、修改的文件不會被監(jiān)控等等骇径,而不是光看文件顏色。但是在這里沒有變灰色的原因:我猜想是因為你在.gitignore
添加了這個文件之后還沒提交修改者春,一旦將修改push遠端破衔,顏色立刻就會改變(?是否變灰是IDEA提供的功能,因此該功能受到IDEA監(jiān)控钱烟,因此添加文件后晰筛,IDEA本身沒有及時更新也會出現(xiàn)這樣的問題,因此顏色判斷一定是最差的判斷方式)