将基于svn的git项目的fork合并回git

时间:2015-01-16 15:14:51

标签: git svn merge git-svn

我正在用git开发一个项目。其他人已经拍摄了我的项目快照,并继续在svn开发。现在我想将svn中的更改合并回git。

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

我对git-svn的理解是它基于svn repo创建了一个新的git repo。该文档还说"不要推动并行Git存储库同时与其他Git开发人员协作",这听起来就像我想要的那样。唯一的简化是我不需要在svn中写任何东西;变化正在从svn转移到git。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

你需要注意的是,使用git-svn svn-branch的历史很可能不会与你的git历史记录联系起来。所以这就是你需要做的事情。

  1. 使用git-svn从你的svn创建一个(new!)git repo。
  2. 将您的git repo添加为远程
  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仓库
  9. 之后,您无法简单地将更改从svn导入svn_branch。如果你想这样做,你需要删除svn_branch,导入你的更改,然后从第6步重新开始。但我并不是100%确定这绝对会有效。小心处理。