2011-10-13 122 views
1

我使用git-svn與遠程的svn虛擬分區進行交互,該分支遵循傳統的主幹,標記和分支佈局。修復缺少分支點的遠程git-svn分支的歷史記錄

svn有一個分支git已經錯過了歷史。我知道歷史是:

r0--r1--r2---r4---r6 remotes/trunk 
     \ 
      r3---r5-- remotes/BRANCH_NAME 

但混帳似乎已經錯過了分支點,認爲歷史是:

r0---r1---r2-----r4---r6 remotes/trunk 

r0'--r1'--r2'--r3--r5--- remotes/BRANCH_NAME 

r0'r1'r2'r0r1份,和r2在git中出現,但不在svn中。在svn中只有一個r0提交。

.git/svn/refs/remotes/BRANCH_NAME/unhandled.log.gz的第一項可以提供專家線索:

r3 
    +dir_prop: . svn:mergeinfo /product/trunk/src_py:371-436%2C438-532 

如何獲得git的認識到,r3r2支,並與r2'r1'r0'做了嗎?


對於額外的信貸:有沒有改寫歷史的svn混帳的的觀點,一般的方式,不會通過git svn fetch等人得到打一頓?

回答

2

原來,日誌消息中的git-svn-id URL不同,從而改變了SHA1。例如。 http://hostname/repohttp://hostname.org.ext/repo

我用git branch-filter --msg-filter來更新每個提交中的git-svn-id標記,問題就消失了。 (當然,運行git gc來清理我的回購中的所有冗餘提交)

0

我建議您使用SmartGit而不是git-svn。它正確處理這種SHA1更改。

或者,如果您有權訪問SVN serevr,請在其中安裝SubGit。 SubGit將創建一個可以使用的鏈接Git存儲庫。 SVN和Git存儲庫將始終保持同步。所以你可以只使用Git接口。