修复缺少其分支点的远程git-svn分支的历史记录

时间:2011-10-13 10:44:44

标签: git git-svn

我正在使用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中出现的r0r1r2的副本,但不是在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等人摧毁?

2 个答案:

答案 0 :(得分:2)

事实证明,日志消息中的git-svn-id URL不同,从而改变了SHA1。例如。 http://hostname/repohttp://hostname.org.ext/repo

我使用git branch-filter --msg-filter更新每次提交中的git-svn-id标记,问题就消失了。 (当然还是运行git gc来清理我的仓库中的所有冗余提交)

答案 1 :(得分:0)

我建议您使用SmartGit代替git-svn。它正确处理这种SHA1变化。

或者,如果您有权访问SVN serevr,请在其中安装SubGit。 SubGit将创建一个可以使用的链接Git存储库。 SVN和Git存储库将始终保持同步。所以你可以只使用Git界面。