忽略某些檔案 —— Git 學習筆記 05
忽略某些檔案
對於某些檔案,我們不希望把它們納入 Git 的管理,也不希望它們總出現在未跟蹤檔案列表。通常它們都是些自動生成的檔案,比如日誌檔案、編譯過程中建立的臨時檔案等。
通過.gitignore
檔案
假設我們要忽略 lib.a 檔案,那我們可以在 lib.a 所在目錄下建立一個名為 .gitignore
的檔案,在裡面列出 lib.a
使用 Windows 的同學注意了,如果你在資源管理器裡新建一個.gitignore
檔案,它會非常弱智地提示你必須輸入檔名,但是在文字編輯器(比如 Notepad++)裡“儲存”或者“另存為”就可以把檔案儲存為.gitignore
了。
除了在.gitignore
裡面列出要忽略的檔名,Git 還支援一種更為豐富的機制:一個.gitignore
檔案裡可以包含一個檔名模式列表,指定哪一類檔案要忽略。格式如下:
空行會被忽略;以“#”號開頭的行可以用於註釋;
一個簡單的字面值檔名(literal filename)匹配任何目錄中的同名檔案;
目錄名由末尾的反斜線(/)標記。這能匹配同名的目錄和子目錄,但是不匹配檔案或符號連結;
支援標準的 glob 模式。glob 模式類似於 shell 所使用的簡化版正規表示式。具體來講,
*
匹配零個或更多字元,[abc]匹配方括號內的任意單個字元(在這個例子裡是a、b或c),而?
則匹配任意單個字元。在方括號中使用短劃線分隔的兩個字元(比如 [0-9])能夠匹配在這兩個字元範圍內的任何單個字元(在這個例子裡是0到9之間的任何數字)。注意:*
不能匹配路徑分隔符。可以用
**
匹配巢狀的目錄,比如 a/**/z 能夠匹配 a/z、a/b/z 和 a/b/c/z 等。以
/
開頭的模式可用於禁止遞迴匹配,即只匹配當前目錄或檔案,而不匹配子目錄或子目錄下的檔案。以
!
開始的模式表示取反,即原本被忽略的目錄或檔案又被 Git 追蹤。注意:出於效能考慮,Git不會遍歷已經被忽略的目錄,因此,定義在被忽略目錄下的.gitignore
規則都是無效的。
說明:
- Git 允許在版本庫中任何目錄下有.gitignore檔案。每個檔案都隻影響該目錄及其所有子目錄。
- 對於多個
.gitignore
檔案,Git 會根據“就近原則”決定結果。簡而言之,就是當前目錄(如果當前目錄沒有被上層目錄忽略)的模式能推翻上層目錄的模式,最接近當前目錄的上層目錄的模式能推翻更上層的目錄模式。 - 忽略只對未跟蹤的檔案有效,對於已加入版本庫的檔案無效。
- 如果要停止 track 一個已經被 Git 追蹤的檔案,可以用
git rm --cached file
命令 。 - 如果想把某個被忽略的檔案加入版本控制, 而又不想修改 gitignore規則(也許改起來特別麻煩),你可以使用
git add -f file
命令。
其他規則源
除了.gitignore
檔案,Git 還有其他的規則源。通常來說,Git 會從多個可能的規則源獲取gitignore
規則來決定是否要忽略某一個具體的路徑。以下列出了各種規則源:
- 配置變數
core.excludesFile
中指定的規則 .git/info/exclude
中定義的規則.gitignore
檔案(後文會具體說明)- 從命令列輸入的規則
說明:
- 在判斷是否會忽略某個路徑時,Git 會根據上述列表中的模式以一定的順序進行模式匹配,然後根據就近優先原則決定結果(從上至下,以最後匹配上的為準)。
- 對於
.gitignore
檔案,Git 會從專案的頂級目錄開始,依次遍歷專案中的所有檔案。子目錄(如果沒有被父級目錄忽略的話)可以覆蓋父目錄中的規則。 - 在一個規則源內部,如果有多個規則匹配,以最後匹配上的為準。
以上三點,總結成一句話——就近原則。
如何選擇規則源
規則定義在哪個檔案中取決於該規則的作用域:
如果一個
gitignore
規則應該被Git追蹤,或者希望別人clone倉庫後這些規則也生效,那麼它就應該被定義在.gitignore
檔案中如果只想規則在某一個倉庫中生效,但是不需要共享給其他使用者, 那麼可以把它定義在此倉庫的
.git/info/exclude
中,這樣它不會隨clone而被複制如果你想某個規則對所有倉庫都生效,則可以配置變數
core.excludesFile
。例如$ touch ~/.gitignore $ git config --global core.excludesFile ~/.gitignore
第1行:在家目錄下面建立一個檔案
.gitignore
,其實路徑和檔名可以自選。當然你需要在這個檔案中寫點規則第2行:配置變數
core.excludesFile
參考資料
- https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758404317281e54b6f5375640abbb11e67be4cd49e0000(廖雪峰)
- https://blog.csdn.net/yongf2014/article/details/79268871
- https://www.atlassian.com/git/tutorials/saving-changes/gitignore#git-ignore-patterns
- 《Git 高手之路》,人民郵電出版社
- 《Git 版本控制管理(第2版)》,人民郵電出版社
- 《精通 Git(第2版)》,人民郵電出版社
相關文章
- Git上傳時忽略某些檔案Git
- Git 小技巧:忽略某些檔案的更改Git
- 使用git-diff時如何忽略某些檔案Git
- IDEA忽略某些檔案Idea
- git 忽略跟蹤檔案Git
- git學習筆記Git筆記
- 『現學現忘』Git基礎 — 19、Git中忽略檔案Git
- Git——.gitignore 忽略檔案和忽略已經提交過的檔案Git
- GIT學習筆記一git initGit筆記
- Pro Git 學習筆記Git筆記
- Git的學習筆記Git筆記
- Git命令學習筆記Git筆記
- git學習筆記5Git筆記
- git學習筆記6Git筆記
- git學習筆記(一)Git筆記
- git學習筆記(二)Git筆記
- Git—學習筆記1Git筆記
- git學習筆記 1Git筆記
- git學習筆記1Git筆記
- Java基礎-學習筆記05Java筆記
- Java學習筆記之檔案Java筆記
- git的忽略檔案和刪除檔案操作Git
- 『現學現忘』Git基礎 — 20、Git中忽略檔案補充Git
- git 入門教程之忽略檔案Git
- Git 忽略已經提交的檔案Git
- Git忽略檔案.gitignore的使用Git
- git 忽略已提交過的檔案Git
- Git 中的物件模型和檔案的詳細檢視 —— Git 學習筆記 13Git物件模型筆記
- iOS學習筆記05 觸控事件iOS筆記事件
- Git極簡學習筆記Git筆記
- git入門學習筆記Git筆記
- Git進階學習筆記Git筆記
- git 和 vim 學習筆記Git筆記
- DVWA-檔案包含學習筆記筆記
- 【C#學習筆記】讀檔案C#筆記
- 【C#學習筆記】寫檔案C#筆記
- 學習筆記:robots.txt檔案筆記
- Git 的特點—— Git 學習筆記 02Git筆記