天天看點

.gitignore 文法

一、介紹

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

二、常用的規則

/mtk/ 過濾整個檔案夾
*.zip 過濾所有.zip檔案
/mtk/do.c 過濾某個具體檔案      

以上規則意思是:被過濾掉的檔案就不會出現在你的GitHub庫中了,當然本地庫中還有,隻是push的時候不會上傳。

除了以上規則,它還可以指定要将哪些檔案添加到版本管理中。

!src/   不過濾該檔案夾
!*.zip   不過濾所有.zip檔案
!/mtk/do.c 不過濾該檔案      

1、配置文法:

  • 以斜杠​

    ​/​

    ​開頭表示目錄;
  • 以星号​

    ​*​

    ​通配多個字元;
  • 以問号​

    ​?​

    ​通配單個字元
  • 以方括号​

    ​[]​

    ​包含單個字元的比對清單;
  • 以歎号​

    ​!​

    ​表示不忽略(跟蹤)比對到的檔案或目錄;

此外,git 對于 .ignore 配置檔案是按行從上到下進行規則比對的,意味着如果前面的規則比對的範圍更大,則後面的規則将不會生效;

2、示例說明

a、規則:fd1/*

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

b、規則:/fd1/*

說明:忽略根目錄下的 /fd1/ 目錄的全部内容;

c、規則:

/*

!.gitignore

!/fw/bin/

!/fw/sf/

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

3、注意

  • “#” 表示注釋
  • “!”  表示取消忽略
  • 空行不作比對
  • 若比對語句中無“/ ” ,便将其視為一個 glob比對,如'abc'可以比對 ' abc' , 'cd/abc' , 'ef/abcde.txt'
  • 若比對語句中有'/ ' ,便視為一個路徑比對,如'abc/'可以比對 ' abc' , 'cd/abc' ,但是無法比對 'ef/abcde.txt'
  • 若比對語句以'/ ' 開始,便視為比對目前目錄,如'/abc'可以比對 ' abc' 但無法比對 'cd/abc' 
  • ** 表示比對零到多級目錄

4、示例

# dependencies  npm封包件
/node_modules

# production  打封包件
/build

# misc 
.DS_Store

npm-debug.log*      

.DS_Store:這個檔案是Mac OS X用來存儲檔案夾的一些諸如自定義圖示,ICON位置尺寸,視窗位置,顯示清單種類以及一些像窗體自定義背景樣式,顔色這樣的元資訊。預設情況下,Mac OS X下的每個檔案夾下應該都會生成一個,包括網絡媒體存儲盤和U盤這樣的外部裝置。

npm-debug.log:項目主目錄下總是會出現這個檔案,而且不止一個,原因是npm i 的時候,如果報錯,就會增加一個此檔案來顯示報錯資訊,npm install的時候則不會出現。

最後需要強調的一點是,如果你不慎在建立.gitignore檔案之前就push了項目,那麼即使你在.gitignore檔案中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有檔案進行版本管理。

簡單來說,出現這種問題的原因就是Git已經開始管理這些檔案了,是以你無法再通過過濾規則過濾它們。是以一定要養成在項目開始就建立.gitignore檔案的習慣,否則一旦push,處理起來會非常麻煩。