Git svn rebase 导致冲突

Git svn rebase results in conflicts

我 运行 在一个相当大的回购(~8000 次提交)上 git filter-branch 删除某些二进制文件,但现在当我 git svn rebase 使我的回购保持最新时,它会导致大量冲突。我猜这是因为这两个命令都涉及重写历史。

有什么方法可以在我的 filter-b运行ch 之后从 SVN 同步到 Git 而没有这些冲突?任何未来的变基也会导致这样的问题吗? (我只是以一种方式从 SVN 同步到 Git)

已发送到 SVN(通过 git svn dcommit)的提交不应进一步更改,因为它会导致如您所见的冲突。

在 git-only 场景中,理论上您可以执行 git push --force (尽管如果您通过该 repo 与其他人合作,则不鼓励这样做),但 SVN 不允许这样做.

因此,您不能重写已经发送到颠覆服务器的内容。如果二进制文件在颠覆服务器上,filter-branch 无论如何也帮不了你。此外,如果您在服务器本身上使用 SVN 工具删除二进制文件,则需要重新检出 git 副本 - git-svn 数据此时将无效。

您现在唯一能做的就是将您的主分支重置为 origin/trunk。

编辑: 至于新出现的冲突,我的猜测是 filter-branch 弄乱了 $GIT_DIR/svn/**/.rev_map 中 git 提交和 svn 修订号之间的关系。 *(参见 git-scm.com/docs/git-svn: CAVEATS/FILES)。 此外,如果您在 git 副本中删除的文件从 SVN 端发生更改,自然会发生冲突。

据我所知,您无法做任何事情来使 filter-branchsvn rebase 兼容。您正在重写与远程相关的历史记录。因此,您更改了提交哈希并使 SVN rev_map 的映射完全无用。

如果您在 filter-branch 之后移除遥控器,情况就不同了,在这种情况下,这根本无关紧要,但就目前情况而言,我认为 没办法 使这项工作。