今天花了点时间学习了下svn本地提交后代码同步更新到线上服务器。(svn服务器的搭建,可参考CentOS搭建SVN独立服务器)
达到此效果,须满足一下几点:
- 本地代码与线上代码被同一个svn版本库控制。
- svn服务器若与线上服务器不处于同一主机,需要有访问外网的能力。
代码同步的原理:
利用svn自带的hooks(钩子)
主要修改的文件:
svn版本库下的 hooks/post-commit.tmpl。
复制或者重命名此文件为post-commit,并增加一个可执行权限 chmod +x post-commit。
删除无用代码,增加如下代码:
1 2 |
export LANG=zh_CN.UTF-8 #此行设置环境变量,很重要!很重要!很重要!(除非你的svn版本库内没有一个中文字符) cd /suixingbiji && svn update --username=suvan --password=*** |
仅此两行代码就可实现两套环境的代码同步,是不是相当简单。使用自带的hooks的一个好处就是,如果commit不成功(文件冲突等等),它会中断线上的同步。
此过程需要注意的问题:
1.环境变量不定义,而版本库中又有中文字符,报错率100%:
1 2 3 4 5 6 7 8 9 |
$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.下图中,框出来的一行要么删除要么注释,不然会报错:命令未找到