我正在使用 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'
是 r0
、r1 的副本
和 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 认识到 r3
是从 r2
分支出来的,并取消 r2'
、r1'
和 r0'
?
额外加分:是否有一种通用方法可以重写 git 对 svn 历史记录的 View ,并且不会被 git svn fetch
等人破坏?
最佳答案
结果是日志消息中的 git-svn-id
URL 不同,从而改变了 SHA1。例如。 http://hostname/repo
和 http://hostname.org.ext/repo
。
我在每次提交中使用gitbranch-filter --msg-filter
更新git-svn-id
标记,问题就消失了。 (当然,运行 git gc 来清除我的存储库中的所有冗余提交)
关于git - 修复缺少分支点的远程 git-svn 分支的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7752930/