有很多檔案不必使用git管理。例如Eclipse或其他IDE生成的項目檔案,編譯生成的各種目标或臨時檔案等。使用git status時,會在Untracked files裡面看到這些檔案清單,在一次需要添加的檔案比較多時(使用git add . / git add -u),會把這些所有的未跟蹤檔案添加進索引。
============一些牢騷============
于是自然想要告訴git把這些檔案忽略,我們當然會想到去Google,輸入本文标題這個關鍵字(一部分人會直接去看document),然後當然會有很多解決方案,多數告訴我們在.gitignore檔案中添加待忽略的檔案目錄清單;照做,問題很有可能依然存在。
再Google,這次可能找到了help.github.com或stackoverflow上,看到一些原文的讨論;其中講到在向.gitignore添加忽略檔案之前一定要保證那些檔案未被git跟蹤,即先使用指令git rm --cached filename将它們從索引中删除。終于看到靠譜的解決方案不禁暗喜,照做--敲一下git status試試,問題很有可能仍然存在。
太多中文“技術資料”是複制照搬過來的,轉載的人自己并沒有試過;稍好一點的在英文社群看到了相關讨論,随手翻譯了一下發過來,可能存在了解上的問題或者忽略了一些細節,導緻依然沒辦法解決問題。
是以搜尋引擎給出的中文的結果,有很多對解決問題絲毫無用的。Git忽略檔案是很普遍也應該是很簡單的一個問題,但多數文章根本連這個問題都沒搞明白,于是引發了這一系列的牢騷。
遇到問題要多思考,想想問題的本質,解決方法的原理;最重要的是要切實地去動手做。
============牢騷結束============
解決方案:
1. 本地倉庫忽略
本地倉庫的檔案忽略規則可以在.git/info/exclude檔案中添加。這些忽略的檔案不會送出到共享庫中,因而不會被協作者所共享。
2. 目前工作目錄添加檔案忽略
對于每一級工作目錄,建立一個.gitignore檔案,向該檔案中添加要忽略的檔案或目錄。但在建立并編輯這個檔案之前,一定要保證要忽略的檔案沒有添加到git索引中。使用指令git rm --cached filename将要忽略的檔案從索引中删除。
--摘抄.gitignore的格式規範
• 所有空行或者以注釋符号 # 開頭的行都會被 Git 忽略。
• 可以使用标準的 glob 模式比對。
• 比對模式最後跟反斜杠(/)說明要忽略的是目錄。
• 要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎号(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正規表達式。星号(*)比對零個或多個任意字元;[abc] 比對任何一個列在方括号中的字元(這個例子要麼比對一個 a,要麼比對一個 b,要麼比對一個 c);問号(?)隻比對一個任意字元;如果在方括号中使用短劃線分隔兩個字元,表示所有在這兩個字元範圍内的都可以比對(比如[0-9]表示比對所有 0 到 9 的數字)。
2.1 工作目錄的每一層下級目錄都可以有一個.gitignore檔案,以說明目前目錄下需要被git忽略的檔案或目錄
2.2 .gitignore檔案可以被送出到共享庫中被協作者共享
3. 全局的.gitignore
可以通過建立~/.gitignore_global并添加到git全局配置以減少每層目錄的規則重複定義。使用指令git config --global core.excludesfile ~/.gitignore_global即可
.gitignore_global檔案範例
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucTNlRzY0YWZ1YGNhZjYzUDOldTM1ITOykTOhljYlVTNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
<span style="font-size: small;"># Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
</span>
References:
【新浪微網誌】 張昺華--sky
【twitter】 @sky2030_
【facebook】 張昺華 zhangbinghua
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.