2012-06-14 126 views
3

當我嘗試觸發混帳拉命令會按如下返回一個錯誤:混帳拉致命錯誤

[email protected]:~/restoranya/restoranya$ git pull origin master

error: object file .git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de is empty

fatal: loose object 2a0836034919f0cfe0f8f1ab98037884dd1c93de (stored in .git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de) is corrupt

[email protected]:~/restoranya/restoranya$ fatal: The remote end hung up unexpectedly

請告訴我這種錯誤的原因是什麼?我該怎麼做才能恢復?

回答

2

出於某種原因,該對象是在你的出身遠程損壞。

你需要這個倉庫的另一個克隆在那裏你可以沒有錯誤運行

git cat-file -t 2a0836034919f0cfe0f8f1ab98037884dd1c93de 

,並要注入該對象的一個​​很好的版本爲原點的對象數據庫。

描述修復可能非常棘手,因爲我們正在討論可能駐留在不同主機上並可能屬於不同用戶的多個克隆。下面的步驟假定您擁有對源的主機的shell訪問權限,作爲擁有您的源存儲庫的用戶。下面的提示origin$表示要在承載原點的計算機上運行的命令。

原始的不良對象是寬鬆的格式,因此還原的最後一步是簡單的複製。

假設在良好克隆的對象也是鬆散,然後運行

origin$ cp /path/to/good-repo/.git/objects/\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/objects/2a 

如果你的起源是一個純倉庫或

origin$ cp /path/to/good-repo/.git/objects/\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/.git/objects/2a 

否則。

如果在好的克隆中這個對象存儲在一個包中,那麼你必須把它弄出來。我建議在臨時丟棄克隆中進行此操作。

origin$ git clone file:///path/to/good-repo /tmp/restore-repo 

如果good-repo在另一臺機器上,則克隆URL將不同。

origin$ git clone [email protected]:src/foo/.git /tmp/restore-repo 

更改爲保存臨時存儲庫的目錄。

origin$ cd /tmp/restore-repo 

移動包文件出了對象數據庫,因爲混帳不會把,如果它認爲它已經擁有它們的對象。

origin$ mkdir /tmp/restore-packs 
origin$ mv .git/objects/pack/* /tmp/restore-packs 

現在,你已經準備好來解壓。

origin$ for pack in /tmp/restore-packs/*.pack; do 
    git unpack-objects -r < $pack 
done 

-r選項告訴git-unpack-objects繼續拆包即使遇到不好的對象。

在這一點上,/tmp/restore-repo現在應該包含2a08360 ......作爲一個鬆散的對象,所以運行取決於原產地是否是一個純倉庫

origin$ cp /tmp/restore-repo/.git/objects\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/objects/2a 

origin$ cp /tmp/restore-repo/.git/objects\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/.git/objects/2a 

0

你試過重新包裝嗎?

git-repack is used to combine all objects that do not currently reside in a "pack", 
into a pack. It can also be used to re-organize existing packs into a single, more 
efficient pack. 
A pack is a collection of objects, individually compressed, with delta compression 
applied, stored in a single file, with an associated index file. Packs are used 
to reduce the load on mirror systems, backup engines, disk storage, etc. 

有清潔您的回購一些命令..

$ git-prune 
$ git-gc --aggressive 
$ git-repack 
$ git-repack -a 
$ git-prune-packed 
+0

其不工作的人。我得到相同的錯誤:( –