一弄匕、前言
我們以Android項目為例子卜范,在新建項目的時候我們提交項目到倉庫之前隧土,會有一個.gitignore文件用于過濾文件或者文件夾垛孔,本人強(qiáng)烈建議在第一次新建的時候把該考慮到的都考慮進(jìn)去藕甩,以免后期團(tuán)隊協(xié)作開發(fā)的時候引起不必要的麻煩,畢竟周荐,時間就是金錢狭莱,哪怕是幾分鐘的事兒。
不過概作,很多朋友可能是中途接手項目腋妙,項目中的忽略文件不合理,此時此刻讯榕,我們第一會想到去修改.gitignore文件去忽略提交倉庫的文件骤素,但是發(fā)現(xiàn)修改完成后,目標(biāo)文件還是能夠提交的愚屁。
所以济竹,我們應(yīng)該怎樣做呢?
二霎槐、解決辦法
1.首先送浊,我們要清楚,為什么我們在提交倉庫之后修改了.gitignore去忽略目標(biāo)文件不起作用丘跌?
原因:.gitignore只能忽略掉那些原來沒有被追蹤(track)的文件袭景,所以如果有一些文件提交到了git倉庫當(dāng)中唁桩,接受了git追蹤,那么直接修改.gitignore是無效的。所以建議在第一次提交項目時候浴讯,把該考慮到的考慮全朵夏。
2.忽略已提交的文件也有很多種不同情況蔼啦,下面我說說常見的幾種:
-
例如說榆纽,有些文件已經(jīng)被提交,但是后期做項目的過程中捏肢,我們想要忽略這些文件的跟蹤奈籽。這些文件在本地磁盤中還想保留著(簡單說就是倉庫上不會存在被忽略的文件,但是本地項目存在這些文件)
應(yīng)用場景如下:
這里我們是在本地配置gradle的distributionUrl鸵赫,由于每臺電腦的gradle路徑都不一樣(如果電腦名不一樣)衣屏,所以需要忽略掉此文件,并且本地是要保留的辩棒。這里 我直接把wrapper整個文件夾直接過濾掉狼忱。
操作如下:
git rm --cached -r gradle/wrapper
然后修改項目.gitignore文件添加過濾規(guī)則:gradle/wrapper
然后commit
最后push 還有種情況,在我們已經(jīng)提交過的一些文件中一睁,在后期由于種種原因發(fā)現(xiàn)不需要某個文件钻弄,我們想這些文件被徹底刪除時候。
操作如下:
git rm somefiles 從本地移除這個文件,并且刪除本地緩存
更新gitignore文件,忽略目標(biāo)文件(somefiles)
然后commit
最后push
三者吁、總結(jié)
1.下面我說說rm命令系列的作用和用法與區(qū)別:
- rm
單純的刪除本地文件窘俺,與git沒有任何關(guān)系,所以git上是不會有該刪除記錄的 - git rm
刪除git追蹤文件复凳,并刪除本地文件瘤泪,git上會保存此次刪除記錄 - git rm --cached -r
單單刪除git追蹤文件,不刪除本地文件
2.為什么增加了.gitignore里的規(guī)則卻沒有效果育八?
- 我在文章開始也簡單提到了对途,那是因為.gitignore文件只能作用于未跟蹤的文件(Untracked Files),也就是從來沒有被Git記錄過的文件。所以要先從Git索引中刪除對改文件的追蹤髓棋,才能使.gitignore文件生效实檀。而刪除文件的追蹤是git rm,這種做法會將本地的物理文件一并刪除。如果想要刪除追蹤狀態(tài)而非物理文件仲锄,可以使用git rm --cached劲妙。