********************************************************
http://jingxuan.io/progit/2-Git%E5%9F%BA%E7%A1%80.html
忽略某些文件
一般我們總會有些文件無需納入 Git 的管理,也不希望它們總出現在未跟蹤文件列表。通常都是些自動生成的文件,比如日志文件,或者編譯過程中創建的臨時文件等。我們可以創建一個名為 .gitignore
的文件,列出要忽略的文件模式。來看一個實際的例子:
$ cat .gitignore *.[oa] *~
第一行告訴 Git 忽略所有以 .o
或 .a
結尾的文件。一般這類對象文件和存檔文件都是編譯過程中出現的,我們用不着跟蹤它們的版本。第二行告訴 Git 忽略所有以波浪符(~
)結尾的文件,許多文本編輯軟件(比如 Emacs)都用這樣的文件名保存副本。此外,你可能還需要忽略 log
,tmp
或者 pid
目錄,以及自動生成的文檔等等。要養成一開始就設置好 .gitignore
文件的習慣,以免將來誤提交這類無用的文件。
文件 .gitignore
的格式規范如下:
- 所有空行或者以注釋符號
#
開頭的行都會被 Git 忽略。 - 可以使用標准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(
/
)說明要忽略的是目錄。 - 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(
!
)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。星號(*
)匹配零個或多個任意字符;[abc]
匹配任何一個列在方括號中的字符(這個例子要么匹配一個a,要么匹配一個b,要么匹配一個c);問號(?
)只匹配一個任意字符;如果在方括號中使用短划線分隔兩個字符,表示所有在這兩個字符范圍內的都可以匹配(比如 [0-9]
表示匹配所有0到9的數字)。
我們再看一個 .gitignore
文件的例子:
# 此為注釋 – 將被 Git 忽略 # 忽略所有 .a 結尾的文件 *.a # 但 lib.a 除外 !lib.a # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO /TODO # 忽略 build/ 目錄下的所有文件 build/ # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt doc/*.txt
********************************************************
.gitignore 只能忽略沒有跟蹤過的文件和目錄,如果已經跟蹤過,需要使用 git rm --cached 命令刪除文件和目錄的追蹤狀態(不刪除文件),然后在.gitignore中添加不追蹤的目錄和文件。