将 git 项目的基于 svn 的分支合并回 git

merging svn-based fork of git project back into git

我正在 git 开发一个项目。其他人已经对我的项目进行了快照并继续在 svn 中进行开发。现在我想将来自 svn 的更改合并回 git。

有没有一种简单的方法可以将 svn 中的更改合并到 git 中?我能想到的最好办法是创建一个新的 git 分支并手动添加所有文件。

我对git-svn的理解是它在svn repo的基础上创建了一个新的git repo。文档还说 "don’t push to a parallel Git repository to collaborate with fellow Git developers at the same time",这听起来正是我想要的。唯一的简化是我不需要在 svn 中写入任何东西;更改仅从 svn 移动到 git。

我会避免任何花哨的技巧并保持简单。

只需在 git 中创建一个新分支即可。接下来,将 svn 分支中的文件覆盖(复制)到 git 分支中。提交您的更改。

我喜欢使用可视化的 kdiff3 来合并两个文件夹,因为我假设您想挑选更改。但是,有很多很棒的工具可以合并两个相似的文件夹。

一旦这些文件覆盖在您的 git 文件之上,您就有最后的机会在提交之前检查更改。 Atlassian Source Tree 是一个很好的工具,可以直观地查看更改,但同样有很多很棒的工具。

您需要注意,使用 git-svn svn-branch 的历史很可能不会与您的 git 历史合并。所以这就是你需要做的。

  1. 使用 git-svn 从您的 svn 创建一个(新的!)git 存储库。
  2. 将您的 git 存储库添加为远程
  3. 看看历史——也许有一些神奇的历史联系在一起。如果是这样,你就完成了。
  4. 在两个回购协议中找到历史分歧点。注意它们的 SHA:OUR-DIV 代表你的 git 历史中最后一个共同提交版本的 sha,THEIR-DIV 代表导入的 svn 历史中最后一个共同提交版本的 sha .
  5. 运行 git replace $THEIR-DIV $OUR-DIV(参见 docu of git replace
  6. 复制你的 svn 分支,让我们将新分支命名为 svn_branch
  7. 看看新的 git log 看看结果是否合您意。如果是,运行:

    git filter-branch svn_branch
    
  8. 您现在可以将 svn_branch 推送到您的主 git 存储库

之后,您不能简单地将进一步的更改从 svn 导入 svn_branch。如果您想要这样做,您需要删除 svn_branch,导入您的更改,然后从第 6 步重新开始。不过,我不能 100% 确定这绝对有效。小心轻放。