為什么要忽略某些文件或文件夾的變化?
git作為一款項目文件變更版本管理軟件,其主要功能之一就是追蹤項目文件夾內各種文件及文件夾的變更情況。但是,在日常使用中,並非項目文件夾下的所有文件及文件夾變更都需要納入版本控制。例如,一些IDE在項目文件夾中留下的配置文件就不需要提交到遠程服務器端與其他項目參與者分享,因為每個項目參與者的開發環境多多少少有些區別,我用不了你的IDE配置,你也用不了我的配置。如果團隊中某一個人將自己的工作區配置上傳到服務器端,不僅無益於源代碼版本管理,反而會給其他項目參與者帶來困擾。
除此之外,還有我們在本地開發環境下對源代碼編譯產生的編譯結果,更不需要提交到服務器端。首先,每個項目參與者都可以通過編譯源代碼獲得編譯結果;其次,一個項目的編譯結果可能超過幾百MB甚至上GB。把這些內容提交到服務器端,會浪費大量的公共存儲空間和上傳下載時間。所以,我們需要git在版本管理時忽略這些文件的變更信息。
如何忽略這些文件和文件夾的變更信息?
1、創建.gitignore文件
在git管理的項目文件夾中(嚴格的講,應該叫做git的本地repository),創建一個文件名為“.gitignore”的純文本文件,如圖1所示:
圖1
上圖中的.gitignore文件就是我用notepad++剛剛創建出來用於告訴git忽略哪些文件變更的配置文件。在這里多說一句,Git在掃描文件變更時,會先查看.gitignore的配置,根據.gitignore中的配置再決定哪些文件需要被標注上untracked。當然,那些被ignore的文件肯定不會被標上untracked,因為那些文件對於git而言是透明的。
2、編輯.gitignore文件
在圖1中,target文件夾是本地編譯結果,nbactions.xml和nb-configuration.xml都是Netbeans IDE的相關配置文件,上述這些文件和文件夾我都不需要提交到遠程服務器端。我們先來看看,如果.gitignore中什么都不寫,git會怎樣處理上述文件和文件夾。這里我使用了GitHub官網提供的GitHub Desktop軟件,感興趣的朋友可以去這里下載(https://desktop.github.com/)
這是GitHub Desktop中顯示的需要提交到版本庫中的文件列表,如圖2所示。
圖2
git將需要提交到版本庫的資源文件全部列出來了,幾乎全是target目錄下的東西。target目錄是maven項目中專門用來暫存源代碼編譯結果的目錄,這些內容不用提交到服務器端。還有nbactions.xml和nb-configuration.xml這兩個文件,也不需要提交到服務器端。
讓我們編輯.gitignore文件,將target、nbactions.xml、nb-configuration.xml三個條目添加到.gitignore中,如列表1所示。
############################## ## Folders ## ############################## target ############################## ## Netbeans conf ## ############################## nb-configuration.xml nbactions.xml
列表1
再來看看GitHut Desktop中有什么變化,如圖3所示。
圖3
上述我們不希望提交的文件變更全部消失了,git不會再追蹤這些文件的變更情況,也不會將它們提交到服務器端。
Tips:
1、在.gitignore文件中還可以使用wildcard(某位同學稱之為“野卡” )通配符,例如,*.log,去掉.gitignore同一文件夾中的所有后綴名為log的文件。GitHub上提供了一份常用的忽略規則,大家可以拿來參考,詳見此處:https://gist.github.com/octocat/9257657。
2、如果.gitignore忽略規則創建於文件提交代碼庫之后,則.gitignore規則不會影響目前所提交的文件(不會自動把文件從服務器端刪除掉)。你需要手動刪除,用如下的方式:
git rm --cached <FILENAME>
<FILENAME>即你要移除的文件全名。