今天講講Git中非常重要的一個文件——.gitignore。
首先要強調一點,這個文件的完整文件名就是“.gitignore”,注意最前面有個“.”。這樣沒有擴展名的文件在Windows下不太好創建,這里給出win7的創建方法:
創建一個文件,文件名為:“.gitignore.”,注意前后都有一個點。保存之后系統會自動重命名為“.gitignore”。
一般來說每個Git項目中都需要一個“.gitignore”文件,這個文件的作用就是告訴Git哪些文件不需要添加到版本管理中。
實際項目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密碼的配置文件等等。
這個文件的內容是一些規則,Git會根據這些規則來判斷是否將文件添加到版本控制中。
下面我們看看常用的規則:
-
/mtk/ 過濾整個文件夾
-
*.zip 過濾所有.zip文件
-
/mtk/do.c 過濾某個具體文件
很簡單吧,被過濾掉的文件就不會出現在你的GitHub庫中了,當然本地庫中還有,只是push的時候不會上傳。
需要注意的是,gitignore還可以指定要將哪些文件添加到版本管理中:
-
!*.zip
-
!/mtk/one.txt
唯一的區別就是規則開頭多了一個感嘆號,Git會將滿足這類規則的文件添加到版本管理中。
為什么要有兩種規則呢?想象一個場景:我們只需要管理/mtk/目錄中的one.txt文件,這個目錄中的其他文件都不需要管理。那么我們就需要使用:
-
/mtk/
-
!/mtk/one.txt
假設我們只有過濾規則沒有添加規則,那么我們就需要把/mtk/目錄下除了one.txt以外的所有文件都寫出來!
最后需要強調的一點是,如果你不慎在創建.gitignore文件之前就push了項目,那么即使你在.gitignore文件中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有文件進行版本管理。
簡單來說,出現這種問題的原因就是Git已經開始管理這些文件了,所以你無法再通過過濾規則過濾它們。
所以大家一定要養成在項目開始就創建.gitignore文件的習慣,否則一旦push,處理起來會非常麻煩。
# 此為注釋 – 將被 Git 忽略
*.a
# 忽略所有 .a 結尾的文件
!lib.a
# 但 lib.a 除外
/TODO
# 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
build/
# 忽略 build/ 目錄下的所有文件
doc/*.txt
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt