1

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

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

'use git-svn' 回答了一些类似的问题,但没有解释它应该如何工作。我得到的问题是我最终在 GIT 中有 2 个不相关的分支。使用 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 的最后一次提交现在作为 svn-local 的一部分显示在 gitk 中。合并导致合并冲突,并且 dcommit 失败。

4

1 回答 1

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

有关详细信息,请参阅 SVN 书中的以下章节:将存储库数据迁移到其他地方

于 2013-04-26T17:18:21.967 回答