我刚刚结束了一个项目,我正在使用商业SVN提供程序来存储源代码.客户最终选择的Web主机包括作为托管包的一部分的存储库,因此,现在项目已经结束,我想将存储库重新定位到他们的Web主机并停止商业帐户.
我该怎么做呢?
如果要移动存储库并保留历史记录,则可能需要在两台主机上进行文件系统访问.最简单的解决方案是,如果您的后端是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.或者,如果您不想保留历史记录,则可以使用工作副本导入新存储库.但希望事实并非如此.
rsvndump
我很好地将存储库从svnrepository.com迁移到我控制的Ubuntu服务器.
安装缺少的依赖项("APR"和Subversion库)
sudo apt-get install apache2-threaded-dev sudo apt-get install libsvn-dev
安装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
将远程SVN存储库转储到本地文件
rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
创建一个新存储库并加载到本地转储文件中
sudo svnadmin create /opt/subversion/my_new_rep sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
您也可以使用svnsync.这仅需要源存储库上的只读访问权限
更多在svnbook
摘自我的Blog-Note-to-myself
现在您可以导入转储文件,例如,如果您要在机器/ subversion版本之间进行迁移.例如,如果我从源存储库创建了一个转储文件并将其加载到新的存储库中,如下所示.
CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp
这样做的工具就是
svnadmin dump
但要实现这一点,您需要对存储库进行文件系统访问.一旦你拥有了(并且存储库是FSFS格式),你可以只将存储库复制到新的位置(如果它是BDB格式,强烈建议使用dump/load).
如果您没有文件系统访问权限,则必须要求您的存储库提供程序为您提供转储(并使它们删除其存储库 - 并希望它们符合要求)
如果您没有对存储库的文件访问权限,我更喜欢rsvndump(远程Subversion存储库转储)来生成转储文件.