我的一个队友问是否可以在保持历史记录的同时从一个SVN导出到另一个。
在我看来,这似乎是一个普遍的要求。
因此:是否可以在所有历史记录之间迁移SVN存储库?
重要的是要注意,我们在Source上没有svnadmin访问,但在Destination上却具有svnadmin访问。
如果只是归结为从源中签出每个修订,然后将其签入到目的地,只要有一个自动化的流程,我们就可以了。
编辑:我忘了提到目标存储库在Windows上。
Answers:
[编辑:以下原始回复来自SVN 1.7之前的版本,这是解决问题的最佳方法(尽管这不是的主要用例svnsync
)。在SVN 1.7客户端或更高版本中,有该svnrdump
工具可以更直接地完成您要实现的目标)]
使用svnsync将源同步到目标(需要管理员访问目标存储库,或者至少需要一种添加钩子的方式,但没有对源存储库的特殊访问权限)。如果目标已经有修订版本,则将源同步到临时存储库,然后用于svn-merge-repos.pl
合并两个本地存储库。
svnsync TOURL FROMURL
吗?
svnsync
是用于只读镜像。
通常可以通过svnadmin dump
命令来实现。如果您没有svnadmin访问权限,那么我会问这样做的人,他们是否可以为您提供转储。这也将使导入过程变得更加容易。
您当前在共享存储库上吗?这可能会使拥有存储库的人感到沮丧,因为它将是整个存储库的副本,而不仅仅是您的一部分。
我也有类似的需求(因此访问了此页面),最终编写了自己的程序来完成这项工作。认为该工具对仍在寻找解决方案的其他人可能有用:
如果有人感兴趣,请在这里查看
您可以使用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
参考:http : //blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/