使用 git 做代碼管理工具時(shí),設(shè)置 gitignore 是必不可少的流程,一些系統(tǒng)或者 IDE 會(huì)在目錄下生成與項(xiàng)目不相關(guān)的文件,而這些文件我們不期望被提交到倉(cāng)庫(kù)之中。理解 gitignore 的 pattern 規(guī)則十分重要。
Pattern 規(guī)則
關(guān)于 Pattern 規(guī)則,可以查看 git 的相關(guān)文檔:http://git-scm.com/docs/gitignore,大致有以下幾點(diǎn):
- 空行不匹配任何內(nèi)容,所以可以作為塊分隔符;
- # 開頭表示注釋,如果相匹配 #,可以在前面加一個(gè)反斜杠,即 #;
- 除非加了反斜杠,否則一連串的空格會(huì)被忽略;
- 如果在匹配的內(nèi)容前面加上 !,則這些匹配過(guò)的部分將被移出,如果要匹配以 ! 開頭的內(nèi)容,需要加上反斜杠,如 !important.txt;
- 如果一個(gè)匹配 pattern 后面有一個(gè)斜杠,如 foo/,則默認(rèn)會(huì)匹配所有(包含父子文件夾)中的 foo 文件夾內(nèi)容,并且它不會(huì)匹配單個(gè)的文件;
- 如果一個(gè)匹配 pattern 不包含斜杠,如 foo,Git 會(huì)將其作為一個(gè) shell 的查找命令匹配內(nèi)容。
需要注意的 **:
- 如果一個(gè) pattern 以
**開頭,如**/foo,最后會(huì)匹配所有文件夾下的foo文件(夾); - 如果一個(gè) pattern 以
/**開頭,如abc/**,則表示匹配 abc 目錄下的所有內(nèi)容; - 如果一個(gè) pattern 中間包含
**,如a/**/b,則會(huì)匹配a/b、a/x/b、a/x/y/b以及所有類似的內(nèi)容。
gitignore 相關(guān)的問(wèn)題
匹配示例
1、如果我們要匹配 ‘foo’ 目錄下除去 ‘foo/bar/‘ 的內(nèi)容,可以這樣做:
foo/
!foo/bar/
2、如果要匹配所有目錄下的 node_modules 文件夾,只需要這樣做:
node_modules/
3、如果要匹配所有的 json 文件,可以這樣做:
*.json
git 操作中,add 之后再加入 gitignore
Git 操作中經(jīng)常會(huì)出現(xiàn)這樣的問(wèn)題,當(dāng)我們 git add 之后,突然想起來(lái)要添加一個(gè) gitignore 文件,但是一些諸如 node_modules/, cache/ 等文件已經(jīng)被 add 進(jìn)去了,這些文件不會(huì)被 ignore 掉,怎么辦?
最直接的方式是:
- # 這一步的操作相當(dāng)于回到 git add 上一步
git rm -r --cached . - # 然后重新 add
git add --all .
git 添加空文件夾
Git 默認(rèn)是不添加空文件夾的,如果一定要加入這個(gè)文件夾,有以下方案:
1)在文件夾添加文件,然后刪除
2)在文件夾中添加一個(gè) .gitkeep 文件
轉(zhuǎn)載自: