.gitignore格式
我們需要用到.gitignore以及.git/info/exclude,即不加入版本控制,在git根目錄下建立.gitignore,具體設定如下:
tmp.txt //忽略tmp.txt
*.log //忽略所有log文件
tmp*.log //忽略log目錄下的包括子目錄下的所有log文件
其他的一些過濾條件,*其實就是正則表達式了
?:代表任意的一個字符
*:代表任意數目的字符
{!ab}:必須不是此類型
{ab,bb,cx}:代表ab,bb,cx中任一類型即可
[abc]:代表a,b,c中任一字符即可
[ ^abc]:代表必須不是a,b,c中任一字符
由於git不會加入空目錄,所以下面做法會導致tmp不會存在
tmp/* //忽略tmp文件夾所有文件
改下方法,在tmp下也加一個.gitignore,內容爲
*
!.gitignore
中止track
還有一種情況,就是已經commit了,再加入gitignore是無效的,我們可以刪除版本庫對文件的track
git rm --cached ignore_file
另外對文件夾內容的track
git rm --cached dir/ -r
最後當然要提交咯,但是這樣相當於刪除了版本庫中的這個文件,但是本地保留,慎重!刪除之後其他人clone下來就沒有該文件了哦
git rm --cached ignore_file
這樣就OK了麼,當然不是。
已track的文件,又必須在版本庫中保留,該如何ignore呢
首先我們要在.gitignore/exclude中進行上述操作忽略他們,但是這些文件已經包括在版本庫,光是這樣忽略是木有用的,有修改依然會有M標記
這時我們在本地clone完成後如下操作,即可忽略這些文件的版本更新:
git update-index --assume-unchanged PATH or FILE
另外重點說一下.
gitignore以及.git/info/exclude的區別
.gitignore
- 可以放到工作目錄任何地方,以相對路徑實施忽略;
- 可以提交到版本庫,對所有clone下來的版本生效。 *所以個人特殊忽略不要在這裏添加哦
.git/info/exclude
- 唯一,本地副本有效
- 不會提交到版本庫,只對本地副本有效
~/.gitconfig/core.excludesfile #全局ignore方法
- 唯一,本地所有git repo有效
gitignore 優先級
它檢查多個gitignore文件的模式,從高到低優先級通過下面規則確定。
來自於支持使用模式的命令行命令
來自於文件系統中的.gitignore文件。目錄結構較高的.gitignore模式將被較近的.gitignore覆蓋
來自$GIT_DIR/info/exclude
被配置變量core.excludesfile指定文件中的模式
Drupal 團隊開發的.gitignore設置
這裏拋磚引玉,介紹一下我們的做法,有錯漏望指證
根目錄下的.gitignore
sites/default/* #忽略該文件所有文件的改動
sites/default/default.settings.php #保留default
.* #忽略經常有的.setting .project等工程配置文件
!.gitignore #保留對.gitignore的跟蹤
個人不需要提交的文件,在.git/info/exclude 自行配置
完成clone後運行下列代碼
git update-index --assume-unchanged sites/default/settings.php
有時候提交了一些東西,但後來想從公共版本庫刪除,並且本地需要保留的文件/目錄,可以運行以下代碼
git rm --cached file/[dir -r]