目标
使用SVN进行版本管理时,有时会遇到意外情况导致版本库丢失造成巨大损失。比如硬盘坏了什么的。因此,需要将SVN仓库备份到其他机器。
SVN备份的方式很多。手动备份工作量很大,定时备份比较轻松也比较简单,但是感觉不太智能。我们要有追求,实现SVN仓库自动同步到备份仓库。
方法
实现方法分为两步:
- 搭建SVN备份仓库,并使用svnsync工具同步SVN仓库。
- 在SVN仓库中设置post-commit钩子,自动进行同步。
目标: 我们需要将存储在A机器上的SVN仓库同步到B机器上的SVN备份仓库。(实际上就是在B机器上搭建一个A机器上的SVN仓库的镜像)
具体操作方法如下:
使用VisualSVN在B机器上创建一个空的SVN仓库,作为SVN备份仓库。
在B机器上新建的SVN备份仓库上右键 -> Properties -> Hooks -> 选中Post-revision property change hook -> 点击左下方的Edit -> 在输入框中输入“exit 0” (镜像必须给SVN仓库足够大的更改权限)
-
初始化备份仓库。在A/B机器上执行:
svnsync init [备份仓库地址] [A机器上的SVN仓库地址]
可能还需要账号与密码,看情况解决。然后就静静等待初始化完成。完成后就可以看到备份仓库与源仓库一模一样啦
-
同步备份仓库。在A/B机器上执行:
svnsync sync [备份仓库地址]
就可以同步啦。可以尝试一下提交然后再同步。
-
设置自动同步。自动同步的原理是利用SVN的提交完成的钩子实现,在A机器上SVN仓库完成提交后执行同步命令,同步到B机器上的备份服务器去。
打开A机器上的VisualSVN -> 在仓库上右键 -> Properties -> Hooks -> 选中Post-commit hook -> 点击左下方的Edit -> 在输入框中输入“svnsync sync [备份仓库地址]”
配置钩子执行权限。在A机器上计算机右键 -> 管理 -> 服务与应用程序 -> 服务 -> 找到VisualSVN Server并右键 -> 属性 -> 登录 -> 本地系统帐户 -> 允许服务与桌面交互 -> 确定
再次提交版本,这时,A 机器会提示有服务需要展示消息 -> 查看消息 -> 根据提示完成输入
注意: 这个方法目前只在A机器是win7的情况下测试通过。在win10上测试不通过,因为win10不会有交互消息展示出来。目前还没有找到解决办法。
至此就大功告成啦,以后每次提交版本到A 机器的SVN仓库时,都会自动提交到B 机器的SVN备份服务器啦。