2017-07-19 79 views
0

當拉我的檔案庫照例(通過短C程序,其拉動許多回購,不管是否發生了變化),它們中的一個打印的以下消息:混帳對象樹如何被破壞?

error: object file .git/objects/eb/4384d0e2460629d912635ec622beb979024316 is empty 
error: object file .git/objects/eb/4384d0e2460629d912635ec622beb979024316 is empty 
fatal: loose object eb4384d0e2460629d912635ec622beb979024316 (stored in .git/objects/eb/4384d0e2460629d912635ec622beb979024316) is corrupt 
fatal: The remote end hung up unexpectedly 

同樣的消息(沒有最後一行)在存儲庫中執行git status時被打印。

這個問題不是關於如何恢復數據或類似的東西。這是關於如何發生這種事。

存儲庫只有1個遠程,只有我使用這個遠程(通過多臺機器)。我直接在這個回購的主人工作,並沒有其他分支。遠程通過ssh訪問。當時拉回了35個回購券,只有這個回購券破產。

看來,這個存儲庫中的最後一次更改是在發生錯誤的機器上進行的,並且已經提交併推送到遠程機器。

我從這個事實猜測,最新的提交在遠程是我會做的回報破壞的計算機上,並且它打破後的工作目錄不包含任何更改爲git status報告一個乾淨的回購如果我再次從遠程克隆,並將破損的回購的工作目錄複製到新的克隆。不幸的是,我不能在破損的回購庫上使用git log,因爲它只打印上面提到的錯誤信息(當然沒有最後一行)。

回購破產是什麼時候的?對我而言,回購似乎完全沒有任何事情發生。


應該把它事:破碎的回購是在我的主文件夾上使用了EXT4分區和Ubuntu的默認主頁文件夾加密(eCryptfs)在Ubuntu 16.04(內核4.8.0-58-generic)的筆記本電腦。

這是我用來拉程序的源代碼:https://pastebin.com/bBTz4vH2

回答

0

通常由git的操作引起的錯誤消息突然中止。

你只需要刪除.git/objects/eb文件夾中的空對象4384d0e2460629d912635ec622beb979024316本地git回購。然後運行git命令(如git statusgit pull)檢查它是否正常工作。

+0

程序運行時,我沒有按任何組合鍵。我添加了用於解決問題的C程序。它爲每個回購啓動一個新的線程,但我沒有看到我的系統的RAM使用率顯着增加。該進程的內存保持在1 MB以下,大多數git實例只是確定它們各自的回購站已經是最新的,並且有一些吸引了一些東西,但通常也保持低於1 MB的RAM使用率。我沒有看到我的系統耗盡了進程槽或類似的東西,即使這樣做,是不是會花更長的時間?那麼可能的原因是什麼? –

+0

由於它不能複製,所以很難說。但也可能是由於同時操作回購引起的。 –

+0

你是指多個git進程同時訪問單個回購? [根據這個問題的答案](https://stackoverflow.com/questions/13039150/are-concurrent-operations-possible-with-git-repositories),git可以同時安全使用,除了'git gc'。如果這提示你一些原因:該對象('eb4384d0e2460629d912635ec622beb979024316')是HEAD指向的東西。由於此對象是在發生錯誤的計算機上發生的上次提交期間創建的,因此HEAD應該在提取之前指向它。 –