一、前言
我們以Android項目爲例子,在新建項目的時候我們提交項目到倉庫之前,會有一個.gitignore文件用於過濾文件或者文件夾,本人強烈建議在第一次新建的時候把該考慮到的都考慮進去,以免後期團隊協作開發的時候引起不必要的麻煩,畢竟,時間就是金錢,哪怕是幾分鐘的事兒。
不過,很多朋友可能是中途接手項目,項目中的忽略文件不合理,此時此刻,我們第一會想到去修改.gitignore文件去忽略提交倉庫的文件,但是發現修改完成後,目標文件還是能夠提交的。
所以,我們應該怎樣做呢?
二、解決辦法
1.首先,我們要清楚,爲什麼我們在提交倉庫之後修改了.gitignore去忽略目標文件不起作用?
原因:.gitignore只能忽略掉那些原來沒有被追蹤(track)的文件,所以如果有一些文件提交到了git倉庫當中,接受了git追蹤,那麼直接修改.gitignore是無效的。所以建議在第一次提交項目時候,把該考慮到的考慮全。
2.忽略已提交的文件也有很多種不同情況,下面我說說常見的幾種:
-
例如說,有些文件已經被提交,但是後期做項目的過程中,我們想要忽略這些文件的跟蹤。這些文件在本地磁盤中還想保留着(簡單說就是倉庫上不會存在被忽略的文件,但是本地項目存在這些文件)
應用場景如下:過濾gradle-wrapper.properties本地配置
這裏我們是在本地配置gradle的distributionUrl,由於每臺電腦的gradle路徑都不一樣(如果電腦名不一樣),所以需要忽略掉此文件,並且本地是要保留的。這裏 我直接把wrapper整個文件夾直接過濾掉。
操作如下:
git rm --cached -r gradle/wrapper
然後修改項目.gitignore文件添加過濾規則:gradle/wrapper
然後commit
最後push -
還有種情況,在我們已經提交過的一些文件中,在後期由於種種原因發現不需要某個文件,我們想這些文件被徹底刪除時候。
操作如下:
git rm somefiles 從本地移除這個文件,並且刪除本地緩存
更新gitignore文件,忽略目標文件(somefiles)
然後commit
最後push
三、總結
1.下面我說說rm命令系列的作用和用法與區別:
- rm
單純的刪除本地文件,與git沒有任何關係,所以git上是不會有該刪除記錄的 - git rm
刪除git追蹤文件,並刪除本地文件,git上會保存此次刪除記錄 - git rm --cached -r
單單刪除git追蹤文件,不刪除本地文件
2.爲什麼增加了.gitignore裏的規則卻沒有效果?
- 我在文章開始也簡單提到了,那是因爲.gitignore文件只能作用於未跟蹤的文件(Untracked Files),也就是從來沒有被Git記錄過的文件。所以要先從Git索引中刪除對改文件的追蹤,才能使.gitignore文件生效。而刪除文件的追蹤是git rm,這種做法會將本地的物理文件一併刪除。如果想要刪除追蹤狀態而非物理文件,可以使用git rm --cached。
作者:碼農大表哥
鏈接:https://www.jianshu.com/p/cde5a5af7b52
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。