我的一位队友询问是否可以从一个SVN导出到另一个SVN,同时保留历史记录。
对我来说,这似乎是一个普遍的要求。
所以:是否可以在维护历史记录的同时在SVN存储库之间进行迁移?
请务必注意,我们在Source上没有svnadmin访问权限,但我们确实在目标上有访问权限。
如果只是从源代码中检出每个修订版本并将其检入目的地,我们就可以了,只要有一个自动化过程。
编辑:我忘了提到目标仓库在Windows上。
答案 0 :(得分:41)
[编辑:以下原始回复来自SVN 1.7之前,这是解决问题的最佳方法(尽管它不是svnsync
的主要用例) 。在SVN 1.7客户端或更高版本中,svnrdump
工具可以更直接地执行您要实现的目标)]
使用svnsync将源同步到目标(需要对目标存储库的管理员访问权限,或者至少是添加挂钩的方法,但没有特殊访问权限到源存储库)。如果目标已有修订,请将源同步到临时存储库,然后使用svn-merge-repos.pl
合并两个本地存储库。
答案 1 :(得分:9)
通常实现这一目标的方法是svnadmin dump
command。如果您没有svnadmin访问权限,那么我会询问该人是否可以为您提供转储。这将使导入过程更加容易。
您目前是否在共享存储库中?这可能会使拥有存储库的人变得为您提供转储,因为它将是整个存储库的副本,而不仅仅是您的存储库。
答案 2 :(得分:9)
我有类似的需求(因此访问了此页面)并最终编写了自己的程序来完成工作。认为该工具可能对仍在寻找解决方案的其他人有用:
如果有人有兴趣,请查看here
答案 3 :(得分:8)
您可以使用git-svn(或者可能是另一个SCM系统)来完成此任务。
步骤如下:
1. Get a git svn clone of each repository:
git svn clone <SVN-REPOSITORY-FROM> source-repo
git svn clone <SVN-REPOSITORY-TO> dest-repo
2. Create patches to be imported:
cd source-repo/
export commitFrom=`git log --pretty=%H | tail -1`
git format-patch -o /tmp/mergepatchs ${commitFrom}..HEAD .
3. Import the patches
cd dest-repo/
git am /tmp/mergepatchs/*.patch
答案 4 :(得分:0)
如果您只需要具有完整变更集的版本控制仓库,则可以将bzr与bzr-svn插件一起使用。 当你签出svn repo时,一切都会同步。