Git 小技巧:忽略某些檔案的更改

ENG八戒發表於2023-03-09

*以下內容為本人的學習筆記,如需要轉載,請宣告原文連結 微信公眾號「ENG八戒」https://mp.weixin.qq.com/s/dp9Mwq7vf0ASF_FftBN8Ww

作為一枚合格的程式碼貢獻者,時常需要跟蹤自己或者團隊程式碼的變更,那麼就很有必要了解並掌握一些軟體程式碼版本管理工具或者系統,比如 Git、SVN、CVS、VSS等。

版本管理工具比較多,都有存在的理由,雖然現在大型的軟體工程都流行使用 git,不過大部分的工程也需要小而美的工具,比如 VSS。我還記得當年新入職的技術經理就帶著我們沒幾個人的小團隊上手了第一款軟體版本管理工具 VSS,它的特點就是非常簡單,每個檔案只能同時由一個成員修改,改完釋放許可權等待其它成員繼續使用。

不過,這裡主要介紹主流的版本管理工具 Git,有一些使用 Git 過程中的小技巧想要分享給大家。

很多時候,由於偶然的原因,把一些不需要共享給團隊其他人的檔案也提交到了程式碼倉庫,那麼當這類檔案有更改的時候,怎麼讓 git 自動忽略掉這些檔案而避免被提交上去呢?

方法就是,為工程新增檔案 gitignore。

檔案介紹

在 Git 管理的工程下,檔案有幾種劃分:

  1. tracked – 這種是被 Git 最新所追蹤到的並且已經暫存和提交到倉庫的所有檔案。
  2. untracked – 這種是在 Git 管理的工程目錄下建立的但還沒有被暫存檔案或提交到倉庫的檔案。
  3. ignored – 這種是被 Git 管理工具可以忽略的檔案。

Git 會對工程資料夾內的 gitignore 檔案做檢索,如果找到該檔案,則根據 gitignore 指定的檔案、資料夾,執行忽略並放棄跟蹤範圍內的檔案。gitignore 指定的檔案就是 ignored 檔案。

建立 gitignore

一般是在 Git 管理的工程根目錄建立檔案 gitignore,並且在檔名前新增點號(.),這是為了讓檔案管理器識別這個檔案為預設隱藏。所以在類 unix 系統下,直接輸入 ls 是看不到這個檔案的,需要新增選項 -a。

ls -a

其實 gitignore 檔案的存放位置沒有固定,這就意味著在同一個工程下可以存在多個 gitignore 檔案。

在類 unix 系統下,都可以這樣建立 gitignore 檔案

touch .gitignore

git 如何忽略檔案或者資料夾

一般,日常開發中,我們認為提交到倉庫的工程檔案應該是最簡化的。只要檔案或者資料夾可以透過工程構建過程自動重新生成的,那麼它們都可以不需要被版本管理工具 git 追蹤到。如何利用好 gitignore 檔案呢?

gitignore 內可以指定單個或者多個檔案,甚至是資料夾。每一行填一個正規化(pattern),正規化可以是檔名或者資料夾名字,其中還可包含萬用字元 *。萬用字元的使用可以增強指定檔案範圍的靈活性。填寫的檔名或者資料夾可以是相對路徑或者絕對路徑,相對路徑是以 gitignore 檔案所在目錄開始。

我們來看一個簡單的 gitignore 檔案長什麼樣子

第一行,直接指定了一個檔名 notice.txt,意思就是相對路徑下 notice.txt 將會被 git 忽略追蹤。

第二行,指定的是一個資料夾名字 project,後邊還帶上了 / 以標明是資料夾,意思就是相對路徑下 project 資料夾內所有檔案以及子檔案都將會被 git 忽略追蹤。

第三行,指定了 app 開頭的所有檔名,意思就是相對路徑下 app 開頭的所有檔案將會被 git 忽略追蹤。

第四行,是的,把 gitignore 檔案自己也指定為忽略追蹤。

在 gitignore 檔案裡新增好正規化後,就可以檢視一下 git 管理的工程目錄是否還在追蹤那些應該被忽略掉的檔案了

git status

如果檔案已經被提交?

在使用 gitignore 檔案來新增忽略檔案的時候,經常會碰到有些檔案或者資料夾明明已經被新增到 gitignore 檔案裡了,但就是還會被 git 追蹤到有更新的內容。

這是因為,這些檔案或者資料夾在之前的提交記錄裡,已經被暫存和提交到倉庫了。那麼怎麼辦?

第一步,先把這些檔案從倉庫中移除,比如我有個構建的中間檔案 xxx 曾經被錯誤提交上去了

git rm xxx

但是,上面的操作會把本地工程目錄中的 xxx 檔案也刪除掉,如果不需要在本地也刪除,可以在 rm 指令後邊新增選項 --cached

git rm --cached xxx

今天就先介紹這麼多,如果你有更好的技巧,期待和你的交流!

微信公眾號 ENG八戒

相關文章