2010-11-01 42 views
24

當我做了一個混帳SVN變基它停在一個點上說:(我才知道,這些SHA鍵對應於一棵樹,而不是從上述兩個SHA鍵混帳顯示提交)如何解決git-svn索引不匹配問題?

Index mismatch: SHA key of a tree != SHA key of another tree.

re-reading <sha index of a commit in svn/trunk> 
... list of files ... 
fatal: bad object <SHA1 index of the bad object> 
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128 

我在git的內部工作方面不是很有經驗,那麼是否有一系列的步驟可以解決像這樣的問題並解決它們?

+3

第一個想我會嘗試與可疑的損壞的存儲庫是['git fsck'](http://www.kernel.org/pub/software/scm/git/docs/git-fsck.html)。 – 2010-11-01 23:33:21

+0

@ Greg-Hewgill:謝謝你的建議。我做了一個git fsck,它列出了一堆懸掛的樹木,提交和blob。我在參考Git用戶手冊中的這一部分:http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#recovering-from-repository-corruption並嘗試弄清楚什麼發生在回購中。幸運的是,幾周前,我將我的.git文件夾存檔,以便我的同事起牀並運行回購協議。我使用它並創建了一個新的回購協議,並繼續我的工作,同時找出發生了什麼事情。 – yasouser 2010-11-03 03:26:50

+0

唯一我能想到的是,在你做之前,別人可能會重新組裝,因此改變了遠程回購的SHA鍵,並給你現在看到的錯誤。如果您要對樹所做的更改進行修改,修復所有衝突,然後重新綁定,可能會正常工作。 – g19fanatic 2010-11-04 13:27:10

回答

30

我有兩次這個錯誤,並通過刪除.git文件夾中的svn文件夾解決它。

rm -r .git/svn 

然後重建與SVN的元數據:

git svn fetch 

你可能會看到的線沿線的一個消息:

Migrating from a git-svn v1 layout... 
Data from a previous version of git-svn exists, but 
    .git/svn 
    (required for this version (1.7.0.4) of git-svn) does not exist. 
Done migrating from a git-svn v1 layout 

和一段時間後(重建特別是可以在需要一段時間大的版本庫),你最終應該再次使用svn倉庫的工作鏡像。

+0

+1爲簡單起見;對於大型軟件倉庫來說確實是過分的,但是在大多數情況下,總體節省時間。 – 2011-03-07 17:26:07

+0

接受這個答案是因爲,我的一個同事今天遇到了同樣的問題(git索引不匹配),我們能夠使用這裏提出的方法恢復回購。由於回購是非常巨大的,但需要相當長的一段時間。 – yasouser 2011-05-05 19:24:38

+0

花了幾個小時爲我的1.2 GB回購重建svn索引數據,但它解決了這個問題。 – 2011-11-25 01:43:44

0

我自己只是有這個錯誤。只需刪除參考,如下所示:

rm .git/refs/remotes/git-svn 

這應該清除錯誤。

+0

我在.git/refs/remotes目錄下找不到git-svn!?! ?! – yasouser 2010-11-05 21:26:55

+1

對不起,我的錯。這應該是'.git/refs/remotes/git-svn'。 – 2010-11-06 00:14:32

+0

我在.git/refs/remotes目錄下沒有git-svn文件!?!?! – yasouser 2010-11-08 14:13:31

1

的問題還有就是你必須在這種情況下,系統地做到這一點:

  • 使用git + SVN
  • 創建與混帳svn的
  • 合併分支的svn分支SVN工具幹路
  • 刪除SVN分支
  • 做一個git - svn的變基

丟失了一切,一切都崩潰了。我知道要恢復的唯一方法是刪除.git中的所有svn並重建所有內容。這只是煩人的,需要一段時間!

29

請不要刪除.git/svn文件夾來解決這個問題。它需要你重建所有的東西,這很煩人,它需要一段時間(我的回購數據庫的大小需要幾個小時),並不是必需的。

我找到了正確的答案here,我已經將它包含在下面。

從鏈接:

裏面的.git目錄運行以下命令:第一個命令的輸出

$ find . -exec grep -Hin 5b32d4ac2e03a566830f30a702523c68dbdf715b {} \; 
Binary file ./svn/.caches/lookup_svn_merge.db matches 
Binary file ./svn/.caches/check_cherry_pick.db matches 

現在刪除匹配的.svn/.caches

$ rm ./svn/.caches/lookup_svn_merge.db 
$ rm ./svn/.caches/check_cherry_pick.db 

現在git svn rebasegit svn fetch到你心中的內容。

+2

是的,我後來才找到這種技術。在我的下一次嘗試中,我剛剛清除了「緩存」,比刪除'.git/svn'要快得多。忘記在這裏更新。感謝您發佈您的答案。 – yasouser 2013-01-10 18:46:35

12

更新的git客戶端和重取最後SVN提交使用:

git svn reset -r 12345 
git svn rebase 

其中12345現有SVN版本。

+1

這種情況下,擺弄'.caches'目錄沒有。 – krlmlr 2014-04-04 21:26:48

+1

這也是我工作的唯一方法。 – 2015-02-18 14:04:59

4

在我的情況下,這個問題是由一個新的/未知的svn作者造成的,他並沒有在我的authors文件中配置git-svn。據報道它的輸出,我忽略了前幾​​曰:

Index mismatch: <leftsha1> != <rightsha1> 
rereading <anothersha1> 
     ... list of files ... 
Author: <name> not defined in /path/to/authors file 

所以這給了我失蹤的名字,什麼文件來添加它太(我從我的組織用戶註冊表拉着電子郵件),並且順利航行。

0

我得到這個錯誤:

Index mismatch: <sha> != <sha> re-reading <sha index of a commit in svn/trunk> ... list of files ... <path> was not found in commit <sha> (r<svn rev>)

在報告的路徑的歷史展望SVN回購協議,我發現那裏已經被添加的文件SVN修訂。但是在Git中爲該修訂所創建的提交看,我發現它沒有包含任何文件!

我認爲這是由早期的完整磁盤造成的。在做一個git svn reset -r回到修復破碎的Git提交後,git svn fetch再次正常工作。

相關問題