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

标签 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'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 认识到 r3 是从 r2 分支出来的,并取消 r2'r1'r0'


额外加分:是否有一种通用方法可以重写 git 对 svn 历史记录的 View ,并且不会被 git svn fetch 等人破坏?

最佳答案

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

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

关于git - 修复缺少分支点的远程 git-svn 分支的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7752930/

相关文章:

git - 为什么 git svn 远程跟踪停止工作?

git - 如何 merge 来自包含另一个目录子集的分支的更改?

git - "Unable to determine upstream SVN information from working tree history"

linux - gitlab如何简化授权ssh key的工作?

git - 跳过 Git 提交钩子(Hook)

git - 从 Heroku 应用程序中删除文件

svn - 当主干移动时,如何在 Git 中保留 SVN 历史记录?

git - 使用 git 查看对特定文件的更改

Git fork /merge 冲突?

git - 找不到文件 packages.config