SVN:如何将对本地存储库的更改合并到主存储库,保留历史记录?

时间:2013-04-26 11:26:55

标签: svn git-svn

由于这里需要详细描述的原因,我创建了一个本地SVN存储库,复制了远程存储库的内容,并对其进行了总共60次提交。同时,远程存储库没有改变一个位。现在我想在远程存储库中获得这60个提交。实现这一目标的最佳方法是什么?

我一直在寻找解决方案。我发现的第一件事是svnsync,但它只适用于新的空存储库。

使用'use git-svn'回答了一些类似的问题,但没有解释这是如何工作的。我得到的问题是我最终在GIT中有两个不相关的分支。使用git-replace我应该能够在远程分支中标记本地分支的祖先,但是在小规模测试中它会导致大量的合并。 作为最后的手段,我可​​以编写一个shell脚本,从本地存储库获取所有补丁并将它们应用到远程存储库。它应该在互联网上的某个地方,但我找不到它。

在未来的场景中,我总是使用GIT来获取本地存储库,这样可以省去很多麻烦。


详细说明我的小规模git-svn测试:

  • 创建SVN存储库svn-original,签出,进行一些提交
  • 创建SVN存储库svn-local,复制svn-original checkout的内容,提交,进行一些其他提交
  • 因为我在Windows上,使用svn-serve在默认端口为svn-original创建服务器,在端口1234上使用svn-local

然后我在控制台中这样做了:

cd temp/git
git svn init --prefix=svn-original –R svn-original svn://localhost/ --stdlayout 
git svn init --prefix=svn-local –R svn-local svn://localhost:1234/ --stdlayout
git svn fetch svn-original
git svn fetch svn-local
git checkout -b svn-original svn-original/trunk
git checkout -b svn-local    svn-local/trunk
git log svn-local --oneline
#  find the commit that adds code from the original
git log svn-original --oneline
#  find the last commit
git-replace <first-local> <last-original>

这不起作用:svn-original的最后一次提交现在在gitk中显示为svn-local的一部分。合并冲突导致合并结果,并且dcommit失败。

1 个答案:

答案 0 :(得分:1)

svnrdump dump --incremental file:///path/to/local/repository -r 42:HEAD |
svnrdump load https://svn.example.org/path/to/remote/repository

有关详细信息,请参阅SVN手册的以下章节:Migrating Repository Data Elsewhere