[Git] 統一口徑的 .gitignore

每個接觸過版本控制系統的開發者,想必都遇到過一個問題「揪竟~~要不要把這個檔案加入版本控管呢?」,會提出這樣的問題,通常是當時還不了解程式的建置過程 (build process),不了解建置前需要哪些額外的文件供建置工具 (build tool) 使用,也不知道過程中會產生哪些附屬品,所以才會有這樣的疑問。但有疑惑不可恥,只要進一步去弄清楚「程式建置過程」,相信那個完美的解答便呼之欲出了。

對於新手開發者而言,常常是不了解程式建置流程的狀況,所以對於哪些文件需要被版本控管,一點概念都沒有,普遍的作法,就是一股腦兒的把所有檔案都加到版本控管內,不費吹灰之力就完成基本地版本控管動作,但如此操作的結果,不僅增加版本庫的佔用空間、增大取得版本庫內容的傳輸量、甚至會導致其他開發人員在建置這份原始碼,發生額外的問題而導致建置失敗。
好吧!那該如何解決這樣的尷尬狀況呢?
通常一開始的選擇,我們會費盡心思去教導新手該避免把哪一些檔案加到版本控管中,但不久後就會發現,大腦的記憶難免不可靠,更何況新手一次接受太多東西,在吸收不良的情況下,很自然地,他們總是會一次將全部的檔案加到版本控管內,此時就悲劇囉,阿貓阿狗的檔案文件都加到版本控管裡了。
而科技來自於人性,科技發展當然是為了讓人「偷懶」囉!為了避免大家忘記或偷懶,其可以在一開始,試著先幫大家在專案內寫好 .gitignore,設定好該忽略哪些檔案後,即使大家直接 commit all,也不至於把所有東西都丟到版本庫內,至少讓新手能夠先適應基本的 Git 操作,也能夠避免專案額外的設定問題。至於 build process 呢?可以慢慢帶給大家,卻又不會讓大家在一開始就挫折感太大,而失去對於工具的耐心,進而產生排斥感。
回到技術點, .gitignore該如何撰寫呢?
  • 注解的方式,就像 shell script 一樣,前面加個”#”開頭即可
  • 給定一個明確的檔案名稱,當前目錄下所有的子目錄,任何標示為此檔名的文件都會被忽略
  • 有個”/”標記的名稱,會被當作是目錄名稱,不會被當作連結或一般檔案
  • 可以用”*”表達任何名稱的可能性
  • 用”!”號可以表達反向的概念
要注意,子目錄如果含有.gitignore,它的.gitignore設定會優先被處理,也就是會override父目錄的.gitignore設定。所以透過這方式對個別目錄作ignore設定。
以下是一個使用在 Android Project 上的 .gitignore 範例:
 
# local configuration
local.properties

# Contains the Java files generated by ADT
gen/

# Output directory of the build.
bin/

# Object code
obj/

# Contains private libraries
# If you don't build JNI code inner the Android
# project, you should remove this line.
libs/

針對這部份也可以參考 Android Developer – Managing Projects 提供的說明,裡面有說明ADT產生的文件作用為何。
stackoverflow 的討論串,也有人分享他的 .gitignore 設定。

One comment

發佈留言