Git忽略規則(.gitignore配置)及其不生效原因和解決

Git忽略文件(ignore file)

轉自:http://blog.csdn.net/benkaoya/article/details/7932370

 

1、    環境

Windows XP SP3 + TortoiseGit + msysGit

 

2、  ignore files的三種方法

 

以下涉及的ignore文件均爲如下格式:

# 以'#'開始的行,被視爲註釋.                                                                                                                          

# 忽略掉所有文件名是 foo.txt的文件.

foo.txt

# 忽略所有生成的 html文件,

*.html

# foo.html是手工維護的,所以例外.

!foo.html

# 忽略所有.o和 .a文件.

*.[oa]

 

【方式一】

在倉庫目錄下新建一個名爲.gitignore的文件(因爲是點開頭,沒有文件名,沒辦法直接在windows目錄下直接創建,必須通過右鍵Git Bash,按照linux的方式來新建.gitignore文件)。如下圖所示。

.gitignore文件對其所在的目錄及所在目錄的全部子目錄均有效。通過將.gitignore文件添加到倉庫,其他開發者更新該文件到本地倉庫,以共享同一套忽略規則。

 

 

 

【方式二】

       通過配置.git/info/exclude文件來忽略文件。這種方式對倉庫全局有效,只能對自己本地倉庫有作用,其他人沒辦法通過這種方式來共享忽略規則,除非他人也修改其本地倉庫的該文件。

 

【方式三】

       通過.git/config配置文件的core. Excludesfile選項,指定一個忽略規則文件(完整路徑),如下圖所示。忽略規則在文件e:/gitignore.txt中(當然該文件名可以任意取)。

       該方式的作用域是也全局的。

 

【例子】

# 忽略*.o和*.a文件

 *.[oa]

# 忽略*.b和*.B文件,my.b除外

*.[bB]

!my.b

# 忽略dbg文件和dbg目錄

dbg

# 只忽略dbg目錄,不忽略dbg文件

dbg/

# 只忽略dbg文件,不忽略dbg目錄

dbg

!dbg/

# 只忽略當前目錄下的dbg文件和目錄,子目錄的dbg不在忽略範圍內

/dbg

 

Git忽略規則(.gitignore配置)不生效原因和解決

 

問題:

.gitignore中已經標明忽略的文件目錄下的文件,git push的時候還會出現在push的目錄中,或者用git status查看狀態,想要忽略的文件還是顯示被追蹤狀態。

原因是因爲在git忽略目錄中,新建的文件在git中會有緩存,如果某些文件已經被納入了版本管理中,就算是在.gitignore中已經聲明瞭忽略路徑也是不起作用的,

這時候我們就應該先把本地緩存刪除,然後再進行git的push,這樣就不會出現忽略的文件了。

 

解決:

   git清除本地緩存(改變成未track狀態),然後再提交。

git rm -r --cached .
git add .
git commit -m 'xxx'

 

注意:

  • .gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。
  • 想要.gitignore起作用,必須要在這些文件不在暫存區中才可以,.gitignore文件只是忽略沒有被staged(cached)文件, 對於已經被staged文件,加入ignore文件時一定要先從staged移除,纔可以忽略。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章