用對 gitignore
使用 git 做代碼管理工具時,設置 gitignore 是必不可少的流程,一些系統或者 IDE 會在目錄下生成與項目不相關的文件,而這些文件我們不期望被提交到倉庫之中。理解 gitignore 的 pattern 規則十分重要。
Pattern 規則
關于 Pattern 規則,可以查看 git 的相關文檔: http://git-scm.com/docs/gitignore ,大致有以下幾點:
- 空行不匹配任何內容,所以可以作為塊分隔符;
- #開頭表示注釋,如果相匹配#,可以在前面加一個反斜杠,即\#;
- 除非加了反斜杠,否則一連串的空格會被忽略;
- 如果在匹配的內容前面加上!,則這些匹配過的部分將被移出,如果要匹配以!開頭的內容,需要加上反斜杠,如\!important.txt;
- 如果一個匹配 pattern 后面有一個斜杠,如foo/,則默認會匹配所有(包含父子文件夾)中的 foo 文件夾內容,并且它不會匹配單個的文件;
- 如果一個匹配 pattern 不包含斜杠,如foo,Git 會將其作為一個 shell 的查找命令匹配內容。
需要注意的**:
- 如果一個 pattern 以**開頭,如**/foo,最后會匹配所有文件夾下的 foo 文件(夾);
- 如果一個 pattern 以/**開頭,如abc/**,則表示匹配 abc 目錄下的所有內容;
- 如果一個 pattern 中間包含**,如a/**/b,則會匹配a/b、a/x/b、a/x/y/b以及所有類似的內容。
gitignore 相關的問題
匹配示例
如果我們要匹配 ‘foo’ 目錄下除去 ‘foo/bar/‘ 的內容,可以這樣做:
foo/ !foo/bar/
如果要匹配所有目錄下的 node_modules 文件夾,只需要這樣做:
node_modules/
如果要匹配所有的 json 文件,可以這樣做:
*.json
git 操作中,add 之后再加入 gitignore
Git 操作中經常會出現這樣的問題,當我們git add之后,突然想起來要添加一個 gitignore 文件,但是一些諸如 node_modules/, cache/ 等文件已經被 add 進去了,這些文件不會被 ignore 掉,怎么辦?
最直接的方式是:
# 這一步的操作相當于回到 git add 上一步 git rm -r --cached . # 然后重新 add git add --all .
git 添加空文件夾
Git 默認是不添加空文件夾的,如果一定要加入這個文件夾,有以下方案:
1)在文件夾添加文件,然后刪除
2)在文件夾中添加一個.gitkeep文件
讓 git 不要添加 gitignore 文件
如果在 .gitignore 文件中添加
.gitignore
你會發現,并沒有起作用, .gitignore 文件依然被加到了 git 中,為什么會有這個需求呢?有些人在本地開發的時候有一些其他的文件夾名不愿意讓別人看到,雖然在 gitignore 中被忽略了,但是 .gitignore 文件中依然可以看到這些文件夾名字。
其實沒有什么好的辦法處理這個問題,.gitignore 做多人協作開發的時候可以直接根據同一份 gitignore 過濾文件,如果一定要做,可以從 add 中在 remove 掉:
git rm --cached .gitignore
Git 操作涉及的命令巨多,但是日常開發中用到的就那么幾個,把原理搞清楚,用起來得心應手。