出於某種原因,該對象是在你的出身遠程損壞。
你需要這個倉庫的另一個克隆在那裏你可以沒有錯誤運行
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
。
其不工作的人。我得到相同的錯誤:( –