出于在此描述的原因,我创建了一个本地 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 失败。