使用svnsync实现已有版本库的镜像
使用svnsync实现已有版本库的镜像 svn不支持分布式开发,所以把svn版本库保存在一台服务器上是不安全的。制作一个镜像svn版本库有多种方式,我采用subversion自带的svnsync程序。
此教程基于Archlinux。windows用户请注意路径表示法。
源版本库路径:http://192.168.16.10/svn/project1 镜像版本库路径:/var/svn/project1
一、建立镜像版本库
1# 创建版本库
2svnadmin create /var/svn/project1
3# 创建钩子
4cp /var/svn/project1/hooks/pre-revprop-change.tmpl /var/svn/project1/hooks/pre-revprop-change
5# 给予钩子运行权限
6chmod a+x /var/svn/project1/hooks/pre-revprop-change
7# 编辑pre-revprop-change钩子,将最后一行的 `exit 1` 改为 `exit 0`
8vim /var/svn/project1/hooks/pre-revprop-change
二、初始化镜像库
1svnsync init file:///var/svn/project1/ http://192.168.16.10/svn/project1
然后按照提示输入密码,提示信息可能如下:
认证领域: http://192.168.16.10 Subversion Repositories “zrong”的密码: 认证领域: http://192.168.16.10 Subversion Repositories 用户名: zrong “zrong”的密码:xxxx 复制版本 0 的属性。
三、同步
1# 以后的同步也使用这段代码进行
2svnsync sync file:///var/svn/project1
如果系统提示要保存明文密码,输入yes就可以了。这里我没有研究如何对密码进行加密。
接下来进入同步流程,同步的提示可能如下:
已提交版本 1。 复制版本 1 的属性。 传输文件数据.................................... 已提交版本 1。
这个时间可能会很长,具体要看网速和原始版本库的大小。如果版本库中有带的的二进制文件,则进度会更慢。在svnsync同步的过程中,应该保证原始的svn数据库不要进行提交操作,否则可能会造成同步失败,同步失败会引起镜像版本库的锁定。下面会讲解如何解锁。
四、解锁
如果在同步的时候遇到下面的提示,可能是由于原始版本库同时正在提交:
从目标版本库获得锁失败,当前被“xxxxx”持有
如果是在svn中,可以使用svn cleanup
来解除锁定。但是svnsync并没有这个功能。我们可以使用下面的代码来解除锁定:
1svn propdel svn:sync-lock --revprop -r 0 file:///var/svn/project1/
2# 删除属性 “svn:sync-lock” 于版本库版本 0
五、修改原始版本库的地址
如果原始版本库的地址改变了(比如说换了域名或者IP地址),在svn中可以使用 svn relocate
来实现,但在svnsync中,就必须用propset来实现了,具体代码如下:
1svn propget svn:sync-from-url –-revprop -r 0 file:///var/svn/project1/
2# 这个操作会显示原始版本库的地址(假如你忘了原始地址就很有用)
3# http://192.168.16.10/svn/project1
4
5# 设置新的版本库地址
6svn propset svn:sync-from-url –-revprop -r 0 http://10.0.0.9/svn/project1 file:///var/svn/project1/
7# 再次同步
8svnsync sync file:///var/svn/project1/
参考文章:
- http://blog.csdn.net/nuoyazhizhou/article/details/5259876
- http://www.emreakkas.com/linux-tips/how-to-change-svnsync-url-for-source-repository
- 文章ID:1598
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/use_svnsync/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。