一、介紹
我們做的每個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,處理起來會非常麻煩。