自动从svn版本库同步到运行目录

svn作为一款版本控制工具,本来我只是当做一个仓库来存放代码。但是后来用到web程序的开发,且需要测试发邮件,

必须把代码更新到另一台测试服务器上。没次都需要把代码提交到svn,又要通过putty到工作目录(/opt/test)敲上一遍命令:svn update

感觉实在太麻烦。所以萌生了commit代码时,同步代码到工作目录的念头,这就是SVN的hooks机制!

1.手动命令方式

要了解hooks方式同步代码,我认为首先要了解手动update方式。

比如我的工作目录是/opt/test,首先要从svn仓库checkout一份代码过来。

局域网访问方式: 

svn checkout svn://192.168.200.35/test-repo --username svn--password 123456 /opt/test

这样仓库中的源码就以副本的形式存在/opt/test中了

本地PC每次commit修改代码后,

执行:svn update -rm /opt/test

注意,svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本

比如,也可切换到/opt/test目录下,运行命令:

svn update

这样就更新了工作目录的源码。

2. hooks 自动把源码从仓库更新到工作目录

在test-repo版本库中,进入hooks


这里有很多xxx.tmpl的脚本模板,分别定义svn不同时间的一些操作,具体作用请参考

http://www.cnblogs.com/ximu/articles/2119136.html 中"同步更新[钩子]”的部分。

因为我要的是提交代码后,自动更新到工作目录,所以我用的是post-commit.tmpl

在hooks下,

cp post-commit.tmpl post-commit

注意:编辑完成post-commit后,为确保可执行权限,执行:sudo chmod 755 post-commit 

vi post-commit

编辑post-commit的内容:

#!/bin/sh   
export LANG=en_US.UTF-8   
/usr/bin/svn update /opt/test --username svn --password 123456
注意:

/usr/bin/svn是svn命令存放的位置,并不是版本库的路径!

/opt/test是你的工作目录;

username和password是你之前在conf/passwd 中定义的账号名和密码。

这样保存,就可以生效了,并不需要重启svnserve服务


总结:

现在比较一下hooks自动方式和手动命令方式,update 前面都是svn命令,update后面都是要更新的工作副本。

其实本质上是一样的。

但是,用hooks方式自动更新,由于是svnserve服务来执行,所以运行svnserve的用户必须要对工作副本有读写权限

比如,我这例子就是:运行svnserve的用户lankou 同时也对/opt/test要有读写权限。

否则会提示"Permision denied"





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值