2009-06-10 138 views
65

我的一个队友已经询问是否可以从一个SVN导出到另一个,同时保持历史。SVN副本历史

对我来说,这似乎是这将是一个普遍的要求。

所以:是否有可能迁移之间SVN库中的所有,同时维持历史?

需要注意的是,我们没有在源svnadmin的访问是非常重要的,但我们确实有在目标。

如果这归结为只是检查出从源头每次修订,并在目的地检查它,我们将与该行,只要有用于自动操作过程。

编辑:我忘了提及目标回购在Windows上。

+0

你可以问任何人有权利的svnadmin做出口的为您服务。 – Glen 2009-06-10 16:54:35

回答

39

[编辑:以下原始回复来自SVN 1.7之前,并且这是解决问题的最佳方式(尽管它不是svnsync的主要用例)。在SVN 1.7客户端或更高版本存在svnrdump工具,更直接地做你想达到什么目的)


使用svnsync到源同步到目的地(需要到目标资源库,或至少管理员权限一种添加挂钩的方式,但没有特殊访问到源存储库)。如果目标已有修订,请将源同步到临时存储库,然后使用svn-merge-repos.pl合并两个本地存储库。

+0

这看起来非常接近我的要求。 – 2009-06-10 17:04:45

+0

是不是可以做一个简单的`svnsync TOURL FROMURL`? – 2009-06-11 04:39:44

+0

命令行选项不同,请参阅http://linux.die.net/man/1/svnsync。 你必须先创建一个(也许是空的)pre-revprop-change钩子(或者如果你是在Windows上的话,则是pre-revprop-change.bat)。 – mihi 2009-06-11 18:33:23

8

的方式来实现通常这是svnadmin dump command。如果你没有访问svnadmin,那么我会询问那些能够提供转储的人。这将使导入过程变得更容易。

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

8

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

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

如果有人有兴趣,看看here

0

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

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 

参考:http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/