2010-07-01 71 views
37

當我嘗試在存儲庫上執行git svn rebase時遇到問題。它顯示:Git svn rebase:校驗和不匹配

Checksum mismatch: code/app/meta_appli/app_info.py 
expected: d9cefed5d1a630273aa3742f7f414c83 
    got: 4eb5f3506698bdcb64347b5237ada19f 

我搜索了很多,但還沒有找到一種方法來解決這個問題。

如果有人知道,請分享您的知識。 在此先感謝。

+1

這看起來類似於您的問題:http://kerneltrap.org/mailarchive/git/2010/2/18/23715 – NorthGuard 2010-07-01 17:30:54

+2

是的,謝謝你的鏈接。對於記錄,我設法通過從svn服務器中刪除文件再次運行,檢查最新版本,然後再次在svn上添加文件。這是非常苛刻的,但我沒有找到另一種方式。 – darkpotpot 2010-07-07 08:54:43

回答

53

This solution只是爲我工作的一個:

看看是什麼在文件的最後一個變化的版本號:

git svn log chrome/test/functional/search_engines.py

復位SVN是之前最接近的父該修訂版:

git svn reset -r62248 -p

做一個git svn fetch

你的成功舞蹈。

+3

很棒的發現。從我所見過的情況來看,這絕對是做到這一點的方法。 git svn log步驟非常重要,但我需要如下使用它:git svn log - chrome/test/functional/search_engines.py。注意 - 這表示文件的路徑,在這種情況下。 – 2012-05-08 04:13:25

+1

需要更多工作的特殊情況:Subversion回購有一個'svn:special = *'歸檔文件(符號鏈接),它被目標文件意外替換。這導致'git-svn'出現「文件名太長」的錯誤,然後在subversion中修復文件後,我們得到'git-svn'的'checksum mismatch'錯誤。這裏的完整解決方案是:1)'git svn rebase --ignore-paths = <有問題的文件>'; 2)在'.git/config'中設置'core.symlinks = false'; 3)執行上面描述的'git svn reset'; 4)做'git svn rebase'; 5)從'.git/config'中移除'core.symlinks = false'。哎喲! – ntc2 2012-05-30 21:13:40

+4

另外值得一提的是,這已經出現了一兩次,並且在完成git svn reset之後,git gc確保「擱淺」歷史被清理並且不被回收。 (這可能會導致問題重演)您可能不需要這樣做,但它對我有幫助。 – 2012-06-22 03:57:15

1

就在我身上,我用完了「git svn dcommit」中間的空間,之後我收到了同樣的信息,「Checksum mismatch」。

我剛剛編輯.git/refs/remotes/git-svn,並用前一個替換了有問題的提交的id。下一個重新佈局解決了這個問題。

0

我剛剛做了一個git gc,然後git svn rebase再次工作。

1

我剛剛指定分支但沒有中繼時遇到此錯誤。當我將其中一個分支指定爲樹幹時,當我重試時沒有任何錯誤。 (整個「後備箱」,「分支」,「後備箱」的區別在git svn中通常有點愚蠢,因爲它們只是人類慣例,在svn中沒有任何深層技術含義。)

-1

在我們的實踐中git svn clone ...命令中的.shtml文件出現錯誤「Checksum mismatch:」錯誤:前端Apache服務器的設置導致將.shtml文件(來自SVN)解釋爲服務器端包含(SSI),從而導致產生實況內容而不是僅提供存儲的文件內容。禁用SSI在遷移期間Apache的/etc/httpd.conf文件通過註釋掉

​​

指令解決了這個問題。
無論如何,倉庫可以排除一些路徑和文件的遷移情況與:

git svn clone <URL> --ignore-paths=<regex> 

條款。檢查SVN服務器進程的環境是否有意義,如果這些文件具有像SSI(以及.php和.py文件)這樣的特殊解釋並將其禁用。