今天花了点时间学习了下svn本地提交后代码同步更新到线上服务器。(svn服务器的搭建,可参考CentOS搭建SVN独立服务器)
达到此效果,须满足一下几点:
- 本地代码与线上代码被同一个svn版本库控制。
- 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.下图中,框出来的一行要么删除要么注释,不然会报错:命令未找到
您可以选择一种方式赞助本站
支付宝扫一扫
微信扫一扫