詳解gitignore的使用方法,讓你盡情使用git add .

TechFlow2019發表於2020-10-12

大家好,歡迎來到週一git專題。

今天和大家聊聊gitignore的作用,其實如果你英文還可以的話,你應該已經基本上猜到它的作用了。ignore在英文當中的意思是忽視、忽略,gitignore自然就是git當中的忽視和忽略,言下之意就是忽略某些檔案。所以gitignore的作用就是幫助我們在git add時將我們指定的一些檔案自動排除在外,不提交到git當中。

ignore的作用

看到這裡你可能很疑惑,git創造出來就是為了管理程式碼和檔案的,為什麼還要禁止一些檔案提交呢?

其實也很簡單,舉個很簡單的例子。比如當我們寫一些編譯型語言的時候,比如C、C++、Java、go。我們在執行之前往往需要編譯一下將它們編譯成可執行的二進位制檔案,也稱為binary檔案。編譯之後的binary檔案其實是比較大的,要比原始碼大很多。經常一個幾十行的程式碼編譯出來好幾百KB甚至1MB這都是很正常的,像是這些二進位制檔案我們就完全沒有必要上傳。

因為不論是誰拿到原始碼編譯一下就可以獲得一樣的結果,完全沒有上傳可執行檔案的必要。相反它還會在git倉庫當中佔據大量的空間,以後不論專案經過多少次迭代,它都會一直停留在git倉庫當中,佔據磁碟資源。

像是這樣沒有必要上傳的檔案還有很多,比如Java編譯出來的class檔案,一些中間結果、配置檔案等等。我們往往圖方便都是會喜歡在使用git add提交檔案的時候使用git add .也就是提交全部的命令來提交。但是如果我們目錄下有這些我們不希望提交的內容的話,也一樣會全部提交上去,所以我們希望可以在一個地方進行設定,這樣當我們使用git add .的時候可以避開一些我們不希望提交上的檔案。

這個用來設定的地方就是gitignore檔案。

使用方法

gitignore的使用方法非常簡單,我們在git目錄下建立一個.gitignore檔案,然後在這個檔案當中列舉出我們不希望提交的檔案即可。

凡是列在這個檔案當中的名稱,當我們在使用git add的時候都會替我們忽略掉。我們也沒有必要從頭開始編寫這個gitignore檔案,因為git當中已經替我們寫好了很多模板,我們可以直接拿過來參考。

模板的地址:https://github.com/github/gitignore

我們開啟之後會看到各種ignore檔案,這些都是為各個語言定製的gitignore檔案。

我們隨便開啟一個看看。比如開啟一個golang的:

從註釋上我們可以看出來,主要都是一些編譯之後的結果

設定ignore

gitignore檔案的語法簡單說起來可以歸結為5條,這5條都挺簡單的,我們一條一條來說。

#表示註釋

這一條很簡單,沒什麼好說的,#開頭的行會被git忽略,因為它表示註釋。這個註釋方法和Python以及shell指令碼是一樣的,寫過的同學應該都不陌生。

忽略整個資料夾

如果我們想要忽略某個路徑下資料夾內的所有內容,那麼我們可以寫出資料夾的路徑再加上斜槓作為結尾即可。

舉個例子,假如說我們希望過濾掉src/build資料夾下的所有內容,我們可以這麼寫:

src/build/

那麼這個路徑下的所有內容都會被忽略,這個路徑是相對路徑。

!表示取反

前面說了,我們可以寫出一個資料夾的路徑來忽略掉這個資料夾下的所有檔案,那麼假如說這個資料夾當中有一個檔案是我們希望提交的,那應該怎麼辦呢?

我們可以用!命令來取反,表示我們指定的可以不遵守忽略條件的檔名。

比如說我們想要保留src/build路徑下叫做main.go的檔案,那麼我們可以加上一行:

!main.go

glob模式匹配

我們都知道正規表示式非常複雜,正規表示式入門這一本書足足有好幾百頁這麼厚。但是實際上我們一般情況往下用不到這麼複雜的模式匹配,所以我們在shell命令當中常用的簡化了的模式匹配規則,它比正規表示式要簡單很多。

比如*可以代表一切的字串,可以是0個也可以是任意多個字元。[abc]表示匹配方括號當中的任何一個字元,?表示匹配任何一個字元。[0-9]表示匹配0-9當中任意一個數字,兩個*號表示任何中間目錄,比如src/**/build,可以匹配到src/test/build,也可以匹配到src/current/build。

比如你想要過濾掉所有的txt格式的檔案,你可以這麼寫:

*.txt

比如你想要過濾掉build路徑下的所有json檔案,你可以這麼寫:

build/*.json

雖然glob的模式匹配遠遠不如正規表示式那麼強大,但是對於常用的檔案匹配的場景來說,它已經足夠了。靈活用好這幾種規則已經足夠可以應付幾乎所有場景下的檔案ignore了。

我們洋洋灑灑寫了這麼多,但是其中的關鍵點只有零碎的幾個,學習成本並不高,但是學會了之後可以一勞永逸地解決很多問題,因此我個人覺得它的價效比還是很高的,非常值得一學。

最後,衷心祝願大家每天都有所收穫。如果還喜歡今天的內容的話,請來一個三連支援吧~(點贊、關注、轉發

原文連結,求個關注

本文使用 mdnice 排版

- END -

相關文章