SVN在具有历史logging的存储库之间进行复制

我的一个队友曾经问过是否有可能从一个SVN出口到另一个SVN,同时保持历史。

对我来说,这似乎是一个共同的要求。

那么: 是否有可能在维护历史的同时在SVN版本库之间进行迁移?

需要注意的是,我们没有svnadmin对Source的访问权限,但是我们确实在Destination上有这个权限。

如果这只是从源头检查每个修订版,并将其检入到目的地,那么只要有自动化的过程,我们就可以。

编辑:我忘了提及,目的地回购是在Windows上。

[ 编辑 :下面的原始回复是从SVN 1.7以前,这是解决问题的最好方法(虽然它不是svnsync的主要用例)。 在SVN 1.7客户端或更高版本中, svnrdump工具可以更直接地执行您正在尝试实现的function)


使用svnsync将源同步到目的地(需要对目标资源库进行pipe理访问,或者至less有一种方法来添加钩子,但不能特别访问源资源库)。 如果目标已经有修订,请将源同步到临时存储库,然后使用svn-merge-repos.pl合并两个本地存储库。

典型的做法是使用svnadmin dump命令 。 如果你没有svnadmin的访问权限,那么我会问那个人,如果他们可以提供转储。 这将使导入过程更容易。

你目前在共享库吗? 这可能会使拥有存储库的人给你一个转储,因为它将是整个存储库的副本,而不仅仅是你的一部分。

我有类似的需求(因此访问了这个页面),并最终编写我自己的程序来完成这项工作。 认为该工具可能对仍在寻找解决scheme的其他人有用:

  • 该工具不需要pipe理员访问源存储库。
  • 它支持添加/删除/复制/移动,保留节点属性(例如svn:ignore,svn:external)和修订版属性(即,您获得正确的作者和date/时间)。
  • 也可以增量复制新的修订版本。
  • 同时具有GUI和命令行实用程序。

如果有人有兴趣,请在这里查看

你可以使用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/

如果你只需要一个完整变更集的版本控制回购,你可以使用bzr-svn插件。 当你签出一个SVN回购,一切都会同步。