我最近需要将一个已有的subversion版本库备份到本机,以往我的做法是使用svadmin dump命令,但svnadmin只能备份本机上的版本库,需要管理员权限。这次要备份的版本库在一台远程主机上,我并没有主机管理员权限,只有访问版本库的权限。经过一番摸索,终于解决了这一问题,现在把同步过程整理记录如下,供大家分享。
我使用的是subversion 1.4中提供的svnsync命令来同步版本库。本机上装有subversion 1.4.3,运行Windows XP。以同步位于http://localhost/svn/repos/project版本库到本机为例。
第1步:在本机上新建一个空目录(本例中是E:/SVNRepo/project),然后进入该目录,创建一个新的版本库,如下所示:
注意create后有一个句号(.),表示当前目录。
第2步:为新的版本库创建pre-revprop-change钩子脚本(hook script)
这一步非常重要,在Windows系统中,钩子脚本要以.bat作后缀。我最初就是因为没有加上该后缀,导致走了不少弯路。
本文不详细讨论钩子脚本细节,关于钩子脚本可以参考subversion book (下载地址: http://svnbook.red-bean.com/)。简单起见,这里我们创建一个空的脚本,即在E:/SVNRepo/project/hooks目录中创建一个空的pre-revprop-change.bat 文件(创建过程很简单,不再赘述)。
第3步:运行svnsync init命令,如下所示:
第4步:完成这一步后,就可以开始同步操作了,如下所示:
至此,版本库同步已经完成。
在使用新的版本库之前,还需要根据需要对版本库的访问权限等进行配置,这些内容已有很多相关讨论,这里就不再重复了。
我使用的是subversion 1.4中提供的svnsync命令来同步版本库。本机上装有subversion 1.4.3,运行Windows XP。以同步位于http://localhost/svn/repos/project版本库到本机为例。
第1步:在本机上新建一个空目录(本例中是E:/SVNRepo/project),然后进入该目录,创建一个新的版本库,如下所示:
E:/SVNRepo/project>svnadmin --fs-type bdb create . |
注意create后有一个句号(.),表示当前目录。
第2步:为新的版本库创建pre-revprop-change钩子脚本(hook script)
这一步非常重要,在Windows系统中,钩子脚本要以.bat作后缀。我最初就是因为没有加上该后缀,导致走了不少弯路。
本文不详细讨论钩子脚本细节,关于钩子脚本可以参考subversion book (下载地址: http://svnbook.red-bean.com/)。简单起见,这里我们创建一个空的脚本,即在E:/SVNRepo/project/hooks目录中创建一个空的pre-revprop-change.bat 文件(创建过程很简单,不再赘述)。
第3步:运行svnsync init命令,如下所示:
E:/SVNRepo/project>svnsync init file:///E:/SVNRepo/project http://localhost/svn/repos/project Copied properties for revision 0 (svn:sync-* properties skipped). |
第4步:完成这一步后,就可以开始同步操作了,如下所示:
E:/SVNRepo/project>svnsync sync file:///E:/SVNRepo/project Committed revision 1. Copied properties for revision 1. Committed revision 2. Copied properties for revision 2. Committed revision 3. Copied properties for revision 3. Committed revision 4. Copied properties for revision 4. Committed revision 5. Copied properties for revision 5. Committed revision 6. Copied properties for revision 6. Committed revision 7. Copied properties for revision 7. Committed revision 8. Copied properties for revision 8. Committed revision 9. Copied properties for revision 9. Committed revision 10. Copied properties for revision 10. (后边的输出省略) |
至此,版本库同步已经完成。
在使用新的版本库之前,还需要根据需要对版本库的访问权限等进行配置,这些内容已有很多相关讨论,这里就不再重复了。