2012-05-10 50 views
0

Git是一個非常棒的SCM。然而,我對一個問題感到無限困惑。甚至在git rm和git結帳之後,Git忽略的文件正在被跟蹤

我有一個配置文件在.gitignore而不是master分支origin(通過git show -- config/mongo.yml)。但是在我的分支,它是從origin/master簽出並繼續工作了一段時間,該文件被莫名其妙地跟蹤,當我git rmorigin/mastergit checkout了一遍,這些文件留在我的回購協議,但消失,其他人在我的球隊。我跑git rm --cached的歡迎,並作爲最後的手段,我跑:

git update-index --assume-unchanged -- config/mongo.yml 

我已經多次使用,效果良好的或忽略的文件,以及分支小到足以重做。但是,這似乎並不是解決問題的方法。我真的很想知道這個「爲什麼」並理解問題,因爲這是解決方案的3/4! :)

我怎麼能在我的.gitignore,然後它顯示跟蹤後git rm config/mongo.ymlgit checkout origin/master -- config/mongo.yml

去除從.gitignore文件以並切換到承諾不具有該文件(並沒有它的.gitignore):

+0

不確定確切的答案,但我認爲可能存在分支衝突,其中一個分支正在跟蹤該文件,而另一個分支未跟蹤該文件。被提交當你做什麼,你得到的git ** **狀態# –

+0

變化: #(使用 「git的重置頭 ...」 來unstage) # #\t新文件:配置/ mongo.yml –

+0

但由於git rm和git rm --cached應​​該完全移除被跟蹤的文件,這不應該發生在我的理解中。 –

回答

0

的事情,當事情很奇怪我試過。

git ls-files --cached --ignored --exclude-standard在每次結帳時,我的行爲都無法解釋。無論如何,我經常這樣做。

git log --all --decorate --oneline --graph path/to/your/cuckoo,它顯示文件的狀態或內容已更改的處處。你可以讓gitk做同樣的事情,調出一個新的視圖。

另外,嘗試克隆到一個鄰居目錄,它將硬鏈接一切,但簽出的內容,所以空間不是一個因素。這會讓你獲得原始的工作樹而不會丟失當前的工作狀態,你可以在那裏試驗並隨時清理任何垃圾。