首頁 > 軟體

.gitignore使用詳解

2020-06-16 16:29:09

一、簡紹

我們做的每個Git專案中都需要一個“.gitignore”檔案,這個檔案的作用就是告訴Git哪些檔案不需要新增到版本管理中。比如我們專案中的npm包(node_modules),它在我們專案中是很重要的,但是它佔的記憶體也是很大的,所以一般我們用Git管理的時候是不需要新增npm包的。

二、常用的規則

Git忽略檔案的原則
  • 忽略作業系統自動生成的檔案,比如縮圖等;
  • 忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,比如Java編譯產生的.class檔案;
  • 忽略你自己的帶有敏感資訊的組態檔,比如存放口令的組態檔。
.gitignore忽略規則的優先順序

在 .gitingore 檔案中,每一行指定一個忽略規則,Git檢查忽略規則的時候有多個來源,它的優先順序如下(由高到低):
1)從命令列中讀取可用的忽略規則
2)當前目錄定義的規則
3)父級目錄定義的規則,依次遞推
4)$GIT_DIR/info/exclude 檔案中定義的規則
5)core.excludesfile中定義的全域性規則

.gitignore忽略規則的匹配語法

在 .gitignore 檔案中,每一行的忽略規則的語法如下:
1)空格不匹配任意檔案,可作為分隔符,可用反斜槓跳脫

2)以“”開頭的行都會被 Git 忽略。即#開頭的檔案標識注釋,可以使用反斜槓進行跳脫。

3)可以使用標準的glob模式匹配。所謂的glob模式是指shell所使用的簡化了的正規表示式。

4)以斜槓"/"開頭表示目錄;"/"結束的模式只匹配資料夾以及在該資料夾路徑下的內容,但是不匹配該檔案;"/"開始的模式匹配專案跟目錄;如果一個模式不包含斜槓,則它匹配相對於當前 .gitignore 檔案路徑的內容,如果該模式不在 .gitignore 檔案中,則相對於專案根目錄。

5)以星號"*****"通配多個字元,即匹配多個任意字元;使用兩個星號"******" 表示匹配任意中間目錄,比如a/**/z可以匹配 a/z, a/b/z 或 a/b/c/z等。

6)以問號"?"通配單個字元,即匹配一個任意字元;

7)以方括號"[]"包含單個字元的匹配列表,即匹配任何一個列在方括號中的字元。比如[abc]表示要麼匹配一個a,要麼匹配一個b,要麼匹配一個c;如果在方括號中使用短劃線分隔兩個字元,表示所有在這兩個字元範圍內的都可以匹配。比如[0-9]表示匹配所有0到9的數位,[a-z]表示匹配任意的小寫字母)。

8)以嘆號"!"表示不忽略(跟蹤)匹配到的檔案或目錄,即要忽略指定模式以外的檔案或目錄,可以在模式前加上驚嘆號(!)取反。需要特別注意的是:如果檔案的父目錄已經被前面的規則排除掉了,那麼對這個檔案用"!"規則是不起作用的。也就是說"!"開頭的模式表示否定,該檔案將會再次被包含,如果排除了該檔案的父級目錄,則使用"!"也不會再次被包含。可以使用反斜槓進行跳脫。

注意:git對於.ignore組態檔是按行從上到下進行規則匹配的,意味著如果前面的規則匹配的範圍更大,則後面的規則將不會生效;

建立.gitignore檔案

1) 常規的windows操作

  • 根目錄下建立gitignore.txt;
  • 編輯gitignore.txt,寫下你的規則,例如加上node_modules/;
  • 開啟命令列視窗,切換到根目錄(可以直接在資料夾上面的位址列輸入cmd回車);
  • 執行命令ren gitignore.txt .gitignore。

2) 用Git Bash

  • 根目錄下右鍵選擇“Git Bash Here”進入bash命令視窗;
  • 輸入vim .gitignoretouch .gitignore命令,開啟檔案(沒有檔案會自動建立);
  • 按i鍵切換到編輯狀態,輸入規則,例如node_modules/,然後按Esc鍵退出編輯,輸入:wq儲存退出。
.gitignore檔案的使用方法

首先,在你的工作區新建一個名稱為.gitignore的檔案。
然後,把要忽略的檔名填進去,Git就會自動忽略這些檔案。
不需要從頭寫.gitignore檔案,GitHub已經為我們準備了各種組態檔,只需要組合一下就可以使用了。

有時對於git專案下的某些檔案,我們不需要納入版本控制,比如紀錄檔檔案或者IDE的組態檔,此時可以在專案的根目錄下建立一個隱藏檔案 .gitignore(linux下以.開頭的檔案都是隱藏檔案),然後在.gitignore中寫入需要忽略的檔案。

[root@dalin ~]``# cat .gitignore
*.xml
*.log
*.apk

.gitignore註釋用'#', *表示匹配0個或多個任意字元,所以上面的模式就是要忽略所有的xml檔案,log檔案和apk檔案。

.gitignore組態檔用於設定不需要加入版本管理的檔案,設定好該檔案可以為版本管理帶來很大的便利。

範例說明

a、規則:fd1/
說明:忽略目錄 fd1 下的全部內容;注意,不管是根目錄下的 /fd1/ 目錄,還是某個子目錄 /child/fd1/ 目錄,都會被忽略;
b、規則:/fd1/

說明:忽略根目錄下的 /fd1/ 目錄的全部內容;
c、規則:

 !.gitignore
 !/fw/bin/
 !/fw/sf/

說明:忽略全部內容,但是不忽略 .gitignore 檔案、根目錄下的 /fw/bin/ 和 /fw/sf/ 目錄;

快速匯入.gitignore模組

對於一個檔案或者一個git專案來說,一般都是一種或者是多種特定的語言,其實有一個可以簡化.gitignore編寫流程,或者是說提供一種忽略思路給我們,就是在githua上有相關的專案,有羅列到常見所有的語言的一些常用忽略規則。
首先提供一下github的連結:gitignore

當然並不是說,新增了這些檔案就不需要在自己寫,因為在不用的工程或者開發環境下都有自己特定的檔案生成,可以使組態檔,可以是中間檔案,這些檔案往往是不需要上傳到我們的版本庫中,這就需要我們手動新增特定的忽略規則。


如果你不慎在建立.gitignore檔案之前就push了專案,那麼即使你在.gitignore檔案中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有檔案進行版本管理。簡單來說出現這種問題的原因就是Git已經開始管理這些檔案了,所以你無法再通過過濾規則過濾它們。所以大家一定要養成在專案開始就建立.gitignore檔案的習慣,否則一單push,處理起來會非常麻煩。


IT145.com E-mail:sddin#qq.com