git在不同的存储库之间合并

时间:2011-12-16 16:45:24

标签: git git-svn git-merge git-patch

我使用git-svn从一个大的svn存储库(git svn clone)创建了一个存储库。 我在我的git存储库中有几个本地提交,我不需要推送到svn但我需要从它获取更新。

现在我意识到我不需要在我的本地存储库中使用整个svn历史记录,因为它使用了太多空间(一些Gb)并且我应该在clone命令中使用-r选项来选择一个起点

我想从一个新的存储库重新开始,然后合并旧存储库中的所有本地提交,但我不确定是否有一种简单的方法可以做到这一点。

情况如下:

旧存储库的日志:

  • local commit 10
  • 本地提交9 ...
  • local commit 1
  • svn revision X
  • svn修订版X-1 ...
  • svn revision 1

新存储库只有一个提交,对应于svn存储库的修订版X的竞争。

我尝试使用format-patch并应用命令,但我不确定如何执行此操作。

有办法做我需要的吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

在您的新存储库中有一种方法:

  • git remote add old您的旧存储库;
  • git fetch old;
  • 检查包含您想要的分支;
  • 了解在更改之前创建分支的起点;
  • 然后使用git rebase --onto

完成后,git remote rm旧回购邮件和git gc

请参阅git help rebase了解--onto选项:它非常非常有用。

答案 1 :(得分:2)

您可以从SVN存储库中检出修订版X并删除所有与SVN相关的文件夹。然后是git init && git add . && git commit -m "Importing revision X from SVN"。现在你已经有了一个Git存储库,其中包含SVN修订版X的快照。

之后您可以使用git format-patch从旧的Git存储库创建补丁。 git format-patch x..其中x是与SVN的修订版X等效的提交。它将生成补丁文件。在旧的Git存储库中执行它。

随后,在新的存储库中,您可以git am all_those_patches.*将它们应用到新存储库中。

比照。 man git-amman git-format-patch