你不知道的 gitignore

2021-08-15 10:22:52 字數 2099 閱讀 5789

乙個.gitignore檔案顯式地指定了哪些檔案不應被git追蹤,即被git忽略掉。在被gitignore之前已經被git追蹤的檔案不受gitignore規則的影響。關於gitignore規則的詳情請繼續往下看。

.gitignore檔案中的每一行都指定了一種匹配模式。通常來說,git會從多個可能的規則源獲取gitignore規則來決定git是否要忽略某乙個具體的路徑path,如下按照優先順序列出了各種規則源,越靠前的規則優先順序越高(在乙個規則源內部,如果有多個gitignore匹配,以最後匹配的為準)

具體講gitignore規則定義在哪個檔案中取決於該規則的作用(域):

git的底層管道工具,比如git ls-filesgit read-tree,只從命令列引數||命令列引數指定的檔案中讀取gitignore規則。上層的git工具,比如git statusgit add,會從上述規則源中讀取gitignore規則

兩個連續的星號**在匹配全路徑名的時候可能有特殊含義:

gitignore檔案的目的是確保某些不應該被git追蹤的檔案確實沒有被track。如果要停止track乙個已經被git追蹤的檔案,請使用git rm --cached ***命令

$ git status

[...]

# 暫未被git追蹤的檔案:

[...]

# documentation/foo.html

# documentation/gitignore.html

# file.o

# lib.a

# src/internal.o

[...]

$ cat .git/info/exclude

# 忽略,即不再追蹤倉庫中所有的objects和壓縮檔案.

*.[oa]

$ cat documentation/.gitignore

# 忽略自動生成的html檔案,

*.html

# 排除手動維護的foo.html,即不忽略foo.html,即git會追蹤foo.html

!foo.html

$ git status

[...]

# 暫未被git追蹤的檔案:

[...]

# documentation/foo.html

[...]

乙個例子不夠,再來乙個:

$ cat .gitignore

vmlinux*

$ ls arch/foo/kernel/vm*

arch/foo/kernel/vmlinux.lds.s

$ echo '!/vmlinux*' > arch/foo/kernel/.gitignore

在這個例子中,第二個.gitignore檔案arch/foo/kernel/.gitignore的優先順序更高,它阻止了第乙個.gitignore檔案試圖忽略arch/foo/kernel/vmlinux.lds.s的行為,從而,git不會忽略arch/foo/kernel/vmlinux.lds.s,會嘗試追蹤它

最後再來乙個例子收尾。舉個忽略目錄下所有檔案或目錄,除了某個特定的目錄foo/bar的例子吧(注意下面的/*,就算沒有前面的斜槓,萬用字元也會匹配包括foo/bar在內的所有檔案或目錄,所以斜槓/是可有可無的):

$ cat .gitignore

# exclude everything except directory foo/bar

/*!/foo

/foo/*

!/foo/bar

譯文到此完畢,我再補充幾個小例子吧

不知道不知道

函式分析 希爾伯特 哥德爾不完備定理 哥德爾不完全性定理一舉粉碎了數學家兩千年來的信念。他告訴我們,真與可證是兩個概念。可證的一定是真的,但真的不一定可證。某種意義上,悖論的陰影將永遠伴隨著我們。無怪乎大數學家外爾發出這樣的感嘆 上帝是存在的,因為數學無疑是相容的 魔鬼也是存在的,因為我們不能證明這...

不知道不知道

函式分析 希爾伯特 哥德爾不完備定理 哥德爾不完全性定理一舉粉碎了數學家兩千年來的信念。他告訴我們,真與可證是兩個概念。可證的一定是真的,但真的不一定可證。某種意義上,悖論的陰影將永遠伴隨著我們。無怪乎大數學家外爾發出這樣的感嘆 上帝是存在的,因為數學無疑是相容的 魔鬼也是存在的,因為我們不能證明這...

你不知道的 和

開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...