2008-12-03 74 views
15

當運行Get SVN獲取到來自上游SVN倉庫拉最新的分支,我得到這個錯誤:致命錯誤混帳SVN期間拆包樹對象獲取

$ git svn fetch 
fatal: failed to unpack tree object 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d 
read-tree 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d: command returned error: 128 

現在在git的每一次嘗試svn的上本地回購導致相同的錯誤。最初我運行git版本1.5.6.4_0,並在錯誤發生後,我嘗試更新到1.6.0.2_2,並且問題仍然存在。

有什麼辦法來清理這個腐敗?上游存儲庫的新git svn克隆是好的,但我想保留我現有的設置。我瀏覽過文檔並且搜索了這個問題,但沒有運氣。

回答

3

這最可能的原因是文件或提交(樹引用)損壞或丟失。或者樹本身可能被損壞。請與:

git fsck --unreachable HEAD $(cat .git/refs/heads/*) 

這將顯示一堆「懸空」的文件,你不關心;損壞的文件將報告「無效的SHA1」或一些這樣的事情。我不知道丟失的文件將如何報告。清除上游回購中的任何損壞物品和rsync以替換它們。

+0

感謝您的信息。不幸的是,沒有損壞的文件出現,只有少數不可及的樹/提交/ blob。 使用git作爲svn repo的前端我沒有上游git用於恢復的rsync。我嘗試從新鮮的git svn克隆rsync,但失去了我所有的本地分支機構。 – notascleveras 2008-12-08 17:50:01

+0

2到3個月前,在新聞組(或者郵件列表)中有一個報告,他們遇到了類似問題,當他們重新打包回購時,這些問題就消失了。我一直無法找到報告,這可能意味着它不是完​​全相同的錯誤消息。 – Paul 2008-12-09 07:22:02

5

我有同樣的問題。這是由於特定的SVN版本,git-svn無法讀取或以某種方式處理。以下是我試過的順序:

  1. 倒帶已知的工作進行修訂:git svn reset -r 42
  2. 重試抓取:git svn fetch - 取每個版本從42開始,直到有罪的(比如50),然後顯示相同的錯誤信息。
  3. 取父母:git svn fetch --parent - 別問我爲什麼。這取得了更多的修訂。不知道它是否相關。
  4. 重試抓取:git svn fetch - 仍然不起作用。
  5. 取下一個修訂版:
    1. git svn fetch -r 50 - Works。
    2. git svn fetch -r 51 - 雖然沒有錯誤信息,繼續。
    3. git svn fetch -r xx - 出現錯誤信息,這是錯誤的修訂。不在乎。
    4. git svn fetch -r xx+1 - Works。
  6. 重試抓取:git svn fetch - Works!開始獲取更多修訂。

這個過程應該被清理掉(可能接近第一步),但它對我很有用,而不需要重新開始一個新的克隆。

3

創建新的SVN分支後,我遇到了同樣的錯誤消息。我可以通過刪除完整的「git的/ SVN」目錄,並從SVN再次取來解決問題:

$ rm -rf .git/svn 
$ git svn fetch 
Rebuilding .git/svn/refs/remotes/trunk/.rev_map.1d5df120-ff1b-4f4f-af56-171ecbcc785d ... 

這再次獲取從SVN所有提交和解決錯誤。