Git忽略提交規則.gitignore配置總結

2019-12-02     IT生涯

在使用Git的過程中,有的文件比如日誌,臨時文件等不要提交到代碼倉庫,這時就要設置相應的忽略規則,來忽略這些文件的提交。該怎麼辦呢?很簡單,git為我們提供了一個.gitignore文件只要在這個文件中申明那些文件你不希望添加到git中去,這樣當你使用git add .的時候這些文件就會被自動忽略掉。

注意:.gitignore 文件是可以提交到公有倉庫中,這就為該項目下的所有開發者都共享一套定義好的忽略規則。

Git忽略文件的原則

- 忽略作業系統自動生成的文件,比如縮略圖等;

- 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;

- 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

.gitignore文件的使用方法

首先,在你的工作區新建一個名稱為.gitignore的文件。

遵循相應的語法,在每一行指定一個忽略規則

然後,把要忽略的文件名填進去,Git就會自動忽略這些文件。

.gitignore注釋用'#', *表示匹配0個或多個任意字符,所以上面的模式就是要忽略所有的xml文件,log文件和apk文件。

.gitignore忽略規則的優先級

在 .gitingore 文件中,每一行指定一個忽略規則,Git檢查忽略規則的時候有多個來源,它的優先級如下(由高到低):

1)從命令行中讀取可用的忽略規則

2)當前目錄定義的規則

3)父級目錄定義的規則,依次遞推

4)$GIT_DIR/info/exclude 文件中定義的規則

5)core.excludesfile中定義的全局規則

.gitignore忽略規則的匹配語法

在 .gitignore 文件中,每一行的忽略規則的語法如下:

1)空格不匹配任意文件,可作為分隔符,可用反斜槓轉義

2)以「#」開頭的行都會被 Git 忽略。即#開頭的文件標識注釋,可以使用反斜槓進行轉義。

3)可以使用標準的glob模式匹配。所謂的glob模式是指shell所使用的簡化了的正則表達式。

4)以斜槓"/"開頭表示目錄;"/"結束的模式只匹配文件夾以及在該文件夾路徑下的內容,但是不匹配該文件;"/"開始的模式匹配項目跟目錄;如果一個模式不包含斜槓,則它匹配相對於當前 .gitignore 文件路徑的內容,如果該模式不在 .gitignore 文件中,則相對於項目根目錄。

5)以星號"*"通配多個字符,即匹配多個任意字符;使用兩個星號"**" 表示匹配任意中間目錄,比如`a/**/z`可以匹配 a/z, a/b/z 或 a/b/c/z等。

6)以問號"?"通配單個字符,即匹配一個任意字符;

7)以方括號"[]"包含單個字符的匹配列表,即匹配任何一個列在方括號中的字符。比如[abc]表示要麼匹配一個a,要麼匹配一個b,要麼匹配一個c;如果在方括號中使用短劃線分隔兩個字符,表示所有在這兩個字符範圍內的都可以匹配。比如[0-9]表示匹配所有0到9的數字,[a-z]表示匹配任意的小寫字母)。

8)以嘆號"!"表示不忽略(跟蹤)匹配到的文件或目錄,即要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。需要特別注意的是:如果文件的父目錄已經被前面的規則排除掉了,那麼對這個文件用"!"規則是不起作用的。也就是說"!"開頭的模式表示否定,該文件將會再次被包含,如果排除了該文件的父級目錄,則使用"!"也不會再次被包含。可以使用反斜槓進行轉義。

注意事項

1. git對於.ignore配置文件是按行從上到下進行規則匹配的,意味著如果前面的規則匹配的範圍更大,則後面的規則將不會生效;

2. 如果你不慎在創建.gitignore文件之前就push了項目,那麼即使你在.gitignore文件中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有文件進行版本管理。簡單來說出現這種問題的原因就是Git已經開始管理這些文件了,所以你無法再通過過濾規則過濾它們。所以大家一定要養成在項目開始就創建.gitignore文件的習慣,否則一單push,處理起來會非常麻煩。

文章來源: https://twgreatdaily.com/zh-mo/8PTGPG8BMH2_cNUg7JCt.html