如何导出(然后导入)Subversion存储库?

Bri*_*haw 80 svn

我刚刚结束了一个项目,我正在使用商业SVN提供程序来存储源代码.客户最终选择的Web主机包括作为托管包的一部分的存储库,因此,现在项目已经结束,我想将存储库重新定位到他们的Web主机并停止商业帐户.

我该怎么做呢?

Tad*_*mas 66

如果要移动存储库并保留历史记录,则可能需要在两台主机上进行文件系统访问.最简单的解决方案是,如果您的后端是FSFS(最新版本的默认设置),则是制作整个存储库文件夹的文件系统副本.

如果您有Berkley DB后端,如果您不确定后端是什么,或者您是否正在更改SVN版本号,那么您将需要使用svnadmin转储旧存储库并将其加载到新的库.使用svnadmin dump将为您提供可以复制到新系统的单个文件备份.然后,您可以创建新的(空)存储库并使用svnadmin load,这将基本上重放所有提交及其元数据(作者,时间戳等).

您可以在此处阅读有关转储/加载过程的更多信息:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

此外,如果您这样做svnadmin load,请确保使用该--force-uuid选项,否则人们将无法切换到新存储库.Subversion使用UUID在内部标识存储库,并且它不允许您将工作副本切换到其他存储库.

如果您没有文件系统访问权限,那么可能还有其他第三方选项(或者您可以编写一些内容)来帮助您迁移:基本上您必须使用svn日志重播新存储库上的每个修订版本,并且然后修复元数据.您需要使用pre-revprop-change和post-revprop-change钩子脚本来执行此操作,这类型假定文件系统访问,因此YMMV.或者,如果您不想保留历史记录,则可以使用工作副本导入新存储库.但希望事实并非如此.

  • 从1.7开始,您现在可以使用svnrdump,它不需要远程存储库的管理员权限.命令很简单:`svnrdump dump https // remote/svn/trunk> repos.dump`.在大多数情况下,该命令也适用于SVN 1.6,但可能存在一些问题,请参阅docs.适用于*nix和Windows. (27认同)

tkd*_*ave 33

rsvndump 我很好地将存储库从svnrepository.com迁移到我控制的Ubuntu服务器.

如何在Ubuntu上安装和使用rsvndump:

  1. 安装缺少的依赖项("APR"和Subversion库)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装rsvndump

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将远程SVN存储库转储到本地文件

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建一个新存储库并加载到本地转储文件中

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    
    Run Code Online (Sandbox Code Playgroud)

  • 然后,迁移现有的工作副本:`svn switch --relocate http://my.svnrepository.com/svn/old_repo http:// newserver.com/svn/my_new_repo` (7认同)

San*_*ken 9

您也可以使用svnsync.这仅需要源存储库上的只读访问权限

更多在svnbook

  • 见http://blog.uncommons.org/2010/05/17/moving-projects-from-java-net-to-github/ (2认同)

Gis*_*shu 7

摘自我的Blog-Note-to-myself
现在您可以导入转储文件,例如,如果您要在机器/ subversion版本之间进行迁移.例如,如果我从源存储库创建了一个转储文件并将其加载到新的存储库中,如下所示.

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp
Run Code Online (Sandbox Code Playgroud)


pil*_*lif 5

这样做的工具就是

svnadmin dump
Run Code Online (Sandbox Code Playgroud)

但要实现这一点,您需要对存储库进行文件系统访问.一旦你拥有了(并且存储库是FSFS格式),你可以只将存储库复制到新的位置(如果它是BDB格式,强烈建议使用dump/load).

如果您没有文件系统访问权限,则必须要求您的存储库提供程序为您提供转储(并使它们删除其存储库 - 并希望它们符合要求)


Ray*_*Ray 5

如果您没有对存储库的文件访问权限,我更喜欢rsvndump(远程Subversion存储库转储)来生成转储文件.