我的队友之一询问是否可以将一个SVN仓库导出到另一个仓库,并保留历史记录。
在我看来,这好像是一个常见的请求。
因此:是否有可能在保留历史记录的同时在SVN仓库之间迁移?
需要注意的是,我们没有源仓库的svnadmin访问权限,但在目标仓库上有该权限。
如果这只涉及从源仓库检出每个版本,并将其检入到目标仓库中,那么只要有自动化的过程,我们就可以接受这种方法。
编辑:我忘了提到目标仓库在Windows上。
我的队友之一询问是否可以将一个SVN仓库导出到另一个仓库,并保留历史记录。
在我看来,这好像是一个常见的请求。
因此:是否有可能在保留历史记录的同时在SVN仓库之间迁移?
需要注意的是,我们没有源仓库的svnadmin访问权限,但在目标仓库上有该权限。
如果这只涉及从源仓库检出每个版本,并将其检入到目标仓库中,那么只要有自动化的过程,我们就可以接受这种方法。
编辑:我忘了提到目标仓库在Windows上。
[编辑:以下原始回复是针对早期版本的 SVN 1.7 之前,这是解决问题的最佳方法(尽管它不是 svnsync
的主要用例)。在 SVN 1.7 客户端或更高版本中,有一个工具 svnrdump
直接实现您正在尝试完成的功能。]
使用 svnsync 将源同步到目标(需要管理员访问目标存储库,或者至少有一种添加挂钩的方式,但对源存储库没有特殊访问权限)。如果目标已经存在版本,则将源同步到临时存储库,然后使用 svn-merge-repos.pl
合并两个本地存储库。
svnsync
用于只读镜像。 - MarkHusvnrdump
,所以你不再需要svnsync
来完成那个任务了... - mihisvnadmin load
命令;如果是远程仓库,则使用svnrdump load
命令。如果要将其加载到非空仓库中,可能需要先运行svndumpfilter
命令,因为如果其他仓库中已经存在文件,则会出现错误(或者先删除/重命名它们,然后在导入后进行修复)。 - mihisvnadmin dump
命令。如果您没有svnadmin访问权限,则应向拥有该权限的人请求提供转储。这将使导入过程更加容易。如果有人感兴趣,请查看这里
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
该文介绍了如何从另一个仓库复制文件或目录并保留历史记录。这对于IT技术人员非常有用。如果您只需要一个带有完整更改集的版本控制存储库,则可以使用带有bzr-svn插件的bzr。
当您检出svn存储库时,所有内容都将同步。