2015-02-09 28 views
10

我使用的是Ubuntu 14.10(64位),git 2.1.0版。這是一個已經存在好幾年的存儲庫,並且最近開始出現問題。我的git存儲庫如何被破壞?

有時我會更改分支,編輯文件和輸入git狀態。它會顯示一堆文件爲「修改」,實際上根本沒有改變。

如果我鍵入以下內容:

$ git commit -am "fixed sms message"

我得到的錯誤是這樣的:

error: short read No such file or directory 
error: globalstatic/images/console/avatar_f.gif: failed to insert intodatabase 
error: unable to index file globalstatic/images/console/avatar_f.gif 
fatal: updating files failed 

如果我什麼都不做除了按向上箭頭鍵,然後按回車一次,我會得到關於git status中顯示的下一個文件的錯誤,該文件從未真正改變過。我可以這樣做,直到我用盡了git status中沒有更改的文件列表,然後它將正確提交。

git fsck --full確實報告已發現問題,但實際上並未解決任何問題。我只需要繼續嘗試提交,直到它工作。下面是輸出的git fsck --full時,它給我的問題:

Checking object directories: 100% (256/256), done. 
Checking objects: 100% (120625/120625), done. 
dangling tag c7539416829fb0748bc32dda3beb386bac46ea9a 
dangling blob 88a0700db2a75e6ea2b14b9a5af15ece63a80805 
dangling blob f4c664b0044f3d5efff1148717dc68b940e08574 
dangling blob 1bf6185091177fd5a496f5bf031f4d666fec92da 
dangling commit fee4bdcc078789a3745aa1311f128a6b61a81736 
dangling blob 9f14e68da29d49895b1ea303ed33cb390fc56b76 
dangling blob 784a02e974b81f35952fb7c31bf2dcb1a7bfeda8 
dangling blob 9e92d6cf395206152123f9a29edb95652114fd34 
dangling commit 1294f626dcb76cafa560f65792517655fb8a52ae 
dangling blob bceb1adde285e71109723211a1bcb5b0fa126681 
dangling tag 19f4be8e7b53465b13359bc4350b5e87c5942560 
dangling blob 93f96a3b5e995032a50723af796dab9ae36fb974 
dangling blob a25bdfab82fef920935478ee2cefe4dc2e81bbf6 
dangling blob af7187350341f3d7795d35cc1f0cee78eb9f9fdf 
dangling blob e2a1db9e3d3d438c8b03cb6254ca492e505be6f8 

如果我運行它不止一次,我得到了同樣的信息。沒有什麼變化。

這是怎麼回事?

+0

檢查文件系統和驅動器的時間,我想......不僅僅是回購。特別是因爲它抱怨工作目錄中的文件(除了'git fsck'問題)。 – twalberg 2015-02-09 21:33:44

+0

存儲哪種文件系統?它是由Dropbox同步的嗎? – jszakmeister 2015-02-09 22:06:46

+0

其實,更多的看,它看起來不像你的回購是腐敗的。懸掛的物體可能是分支不再存在的結果,也可能是重新分配工作的結果。懸掛標籤有點可疑,但可能是因爲您在路上某處刪除了標籤。似乎發生的事情是,Git不會承諾回購。您可以嘗試在命令行的開頭添加'GIT_TRACE = 2'來獲取更多有關正在發生的事情的更多信息。 – jszakmeister 2015-02-09 22:10:48

回答

8

不知道發生了什麼(除了注意到顯而易見的事情,有些東西正在破壞你的git回購),但我知道我是如何解決這樣的事情 - 我希望這是一個隱含的問題!

  • 把你的回購的地方(本地純倉庫將被罰款)
  • 舊庫重命名爲myrepo.broken或類似
  • 退房回購的全新副本,你推到了前面的地方
  • 一旦你確定你什麼也沒有丟失,刪除舊的回購

我更喜歡上述方法來回購回購本身。但是,如果你堅持(我會先備份):

  • 請注意,懸空斑點和提交可能完全沒有問題 - 請參閱here。短讀的東西應該是不是發生。
  • git gc --prune=now將會修剪所有懸掛的斑點和提交。
  • Here的維護和數據恢復教程。

至於發生了什麼事情而言,我已經受夠了

  • NFS掛載包含的Git樹起始目錄時,NFS服務器是不可靠的問題
  • 不區分大小寫的歸檔系統
  • 功率損耗/系統崩潰導致FS損壞,或發生中途通過承諾
  • 系統中未識別的gremlins

這很容易避免第一個和第二個重複,第三個是可以理解的,但第四個往往是棘手的。午夜後避免餵食。

+0

我會給它一個。謝謝! – synic 2015-02-09 20:42:12

+0

最糟糕的部分是gremlins可能是一個很有可能的原因。可以是病毒,掃描儀,文件備份系統等,隨着東西被修改而隨時修改文件。考慮的問題是想想最近在環境中發生了什麼變化(你是否做了更新?你安裝了新軟件嗎?) – sjagr 2015-02-09 20:47:27

相關問題