乙個.gitignore
檔案顯式地指定了哪些檔案不應被git追蹤,即被git忽略掉。在被gitignore之前已經被git追蹤的檔案不受gitignore規則的影響。關於gitignore規則的詳情請繼續往下看。
.gitignore
檔案中的每一行都指定了一種匹配模式。通常來說,git會從多個可能的規則源獲取gitignore
規則來決定git是否要忽略某乙個具體的路徑path,如下按照優先順序列出了各種規則源,越靠前的規則優先順序越高(在乙個規則源內部,如果有多個gitignore
匹配,以最後匹配的為準)
具體講gitignore規則定義在哪個檔案中取決於該規則的作用(域):
git的底層管道工具,比如git ls-files
和git read-tree
,只從命令列引數||命令列引數指定的檔案中讀取gitignore
規則。上層的git工具,比如git status
和git 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 第二個運...