SVN更新的同时线上服务器同步更新

今天花了点时间学习了下svn本地提交后代码同步更新到线上服务器。(svn服务器的搭建,可参考CentOS搭建SVN独立服务器)

达到此效果,须满足一下几点:

  1. 本地代码与线上代码被同一个svn版本库控制。
  2. svn服务器若与线上服务器不处于同一主机,需要有访问外网的能力。

代码同步的原理:

利用svn自带的hooks(钩子)

主要修改的文件:

svn版本库下的hooks/post-commit.tmpl

复制或者重命名此文件为post-commit,并增加一个可执行权限chmod +x post-commit

删除无用代码,增加如下代码:

export LANG=zh_CN.UTF-8		#此行设置环境变量,很重要!很重要!很重要!(除非你的svn版本库内没有一个中文字符)
cd /suixingbiji && svn update --username=suvan --password=***

仅此两行代码就可实现两套环境的代码同步,是不是相当简单。使用自带的hooks的一个好处就是,如果commit不成功(文件冲突等等),它会中断线上的同步。

此过程需要注意的问题:

1.环境变量不定义,而版本库中又有中文字符,报错率100%:

$svn commit -m'测试svn提交线上是否同步'
Sending        abc.txt
Transmitting file data .
Committed revision 15.

Warning: post-commit hook failed (exit code 1) with output:
svn: Error converting entry in directory 'aaaa/bbbb' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
svn: ?\231?\190?\142?\229?\165?\179.jpg

2.下图中,框出来的一行要么删除要么注释,不然会报错:命令未找到 svn%e6%9b%b4%e6%96%b0%e7%9a%84%e5%90%8c%e6%97%b6%e7%ba%bf%e4%b8%8a%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%90%8c%e6%ad%a5%e6%9b%b4%e6%96%b0

评论

评论正在提交中...请稍后
评论提交成功...