我正在使用git-svn
与远程svn
代理进行交互,这些代表遵循传统的主干,标记和分支布局。
svn
中有一个git
错过了历史的分支。我知道历史:
r0--r1--r2---r4---r6 remotes/trunk
\
r3---r5-- remotes/BRANCH_NAME
但是git似乎错过了分支点并且认为历史是:
r0---r1---r2-----r4---r6 remotes/trunk
r0'--r1'--r2'--r3--r5--- remotes/BRANCH_NAME
其中r0'
,r1'
和r2'
是git中出现的r0
,r1
和r2
的副本,但不是在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意识到r3
已从r2
分支并取消r2'
,r1'
和r0'
?
额外的功劳:是否有一般方法可以重写git对svn历史的看法,这不会被git svn fetch
等人摧毁?
答案 0 :(得分:2)
事实证明,日志消息中的git-svn-id
URL不同,从而改变了SHA1。例如。 http://hostname/repo
和http://hostname.org.ext/repo
。
我使用git branch-filter --msg-filter
更新每次提交中的git-svn-id
标记,问题就消失了。 (当然还是运行git gc
来清理我的仓库中的所有冗余提交)
答案 1 :(得分:0)