git使用隨筆:如何忽略已提交到倉庫的文件或者文件夾

一、前言

我們以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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章