SVN实时同步备库方法

  1. 1. 备份原理
  2. 2. 创建备库
  3. 3. 同步备库
  4. 4. 配置实时同步
  5. 5. 测试实时同步
  6. 6. 可能遇到的问题

前面一篇文章已经写了如何搭建svn服务器,虽然把代码保存到svn服务器管理,但是如果svn服务器出现异常也可能造成代码丢失,版本丢失等
为了保证代码安全性,备份是必须的,为了保证所有代码都不丢失,实时备份就很重要了

备份原理

svn本身提个了一些钩子,可以自定义脚本来完成一些功能,而为了完成实时备份就用到了post-commit
post-commit是代码commit后执行的钩子,而实时备份就利用这个钩子,在每次代码提交后执行这个钩子去同步到备库

创建备库

假设我已经在svnserver1上搭建了一个test库,现在我们在svnserver2上搭建一个backup库

1
2
3
4
5
svnadmin create backup
cd backup/hooks
mv pre-revprop-change.tmpl pre-revprop-change
sed -i '/exit 1/d' pre-revprop-change
chmod +x pre-revprop-change

上面省去了conf文件夹中的权限配置,具体方法可以看我前一篇文章《SVN安装笔记
pre-revprop-change这个钩子是用来修订版本属性修改的通知的,开启同步必须开启它

同步备库

当你创建好备库,并且配置好权限后,就可以对备库进行初始化,然后进行首次同步

1
2
svnsync init svn://svnserver2/backup svn://svnserver1/test --username joysboy --password 123 --no-auth-cache
svnsync sync svn://svnserver2/backup --username joysboy --password 123 --no-auth-cache

完成后备库已经同当前主库保持一致了,后面需要开启实时同步

配置实时同步

到主库的hooks目录开启post-commit

1
2
3
4
5
cd test/hooks
mv post-commit.tmpl post-commit
chmod +x post-commit
sed '$i/svnsync sync svn://svnserver2/backup --non-interactive --no-auth-cache --username joysboy --password
123' post-commit

最后一行就是让每次提交代码后执行增量同步

测试实时同步

搞定后,可以到主库测试一下提交代码后,备库是否更新了

1
2
3
4
5
6
7
8
9
10
11
12
13
svn co svn://svnserver1/test --username joysboy --password 123 
svn co svn://svnserver2/backup --username joysboy --password 123
cd test
touch test1
svn add test1
svn ci -m "test sync"
正在发送 test1
传输文件数据.
提交后的版本为 35
cd ../backup
svn up
A test1
更新到版本 35

这里可以看到主库提交代码后版本更新到35,在备库update出最新版,也是35,也就说明实时同步成功了

可能遇到的问题

这里简要说明几点可能会碰到的问题
post-commit hook failed (exit code 255)
开始我碰到这个错误码,去网上搜了一下,清一色的说编码不对,需要在post-commit中什么编码为UTF-8
但是我怎么想都不对我代码里就几个字母,不可能是编码问题,中国的大部分文章清一色的瞎眼转载
后来仔细看了svnbook,钩子是需要有可执行权限的,我开始没有给post-commit可执行权限,所以报了这个错

总的来说,让svn实现实时同步还是非常简单的,利用svn自带的钩子就能完成,如果有问题欢迎交流

声明: 除非注明,小峰网络遨游记文章均为原创,转载请以链接形式标明本文地址

本博客原创文字只代表本人某一时间内的观点或结论,与本人所在公司没有任何关系。

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

第三方若用于商业用途的转载,须取得本人授权。

本文作者:

本文地址:http://xfeng.me/svn-real-time-sync-standby/

你可能还对下面文章感兴趣: