git版本管理 .gitignore設置

.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

  1. 可以放到工作目錄任何地方,以相對路徑實施忽略;
  2. 可以提交到版本庫,對所有clone下來的版本生效。 *所以個人特殊忽略不要在這裏添加哦

.git/info/exclude

  1. 唯一,本地副本有效
  2. 不會提交到版本庫,只對本地副本有效

~/.gitconfig/core.excludesfile #全局ignore方法

  1. 唯一,本地所有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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章