svn使用post
svn使用post-commit实现自动部署,自动checkout
搭建svn都不是仅仅为了把代码存到仓库,而是同步部署到对应的项目。
在 svn 目录的 /hooks里面有一堆tmpl,这些tmpl可以做很多事情,不过今天我们就说一下自动部署post-commit.tmpl。
tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面
在svn版本库的hooks目录
]# cd /var/svn/four/hooks
]# cp post-commit.tmpl post-commit //复制post-commit.tmpl 改名为post-commit
]# > post-commit //清空内容
]# vi post-commit 打开文件
写入以下内容
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /www/4th
其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别
第二行是编码格式:这里我使用的是UTF-8
最后一行/usr/bin/svn 是svn的路径,不是项目路径,应该都是一样的,后半句分别是用户名、密码、和项目路径。--username这个比较坑了,网上搜出来的很多都搞错了,前面其实是两个减号,英文输入法下的。
例:
修改post-commit的可执行权限
]# chmod 755 post-commit
在服务器进入项目目录/www/4th checkout 整个项目。
例:
]# cd /www/4th
]# svn checkout svn://192.168.1.111/four .
svn checkout svn://{您的服务器地址}:{端口号}/four.
//注意目录后面还有一个点
注意:此处的/four 可不需要添加:( 添加的目的是为了实现多个项目。 )
常见错误:
255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有#!/bin/sh
提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用./post-commit手动执行看报什么错误。如果乱码,请将文件内编码格式修改为GBK
提示** is a direcitory:/usr/bin/svn你把这个搞错了,他不是一个目录,是svn的路径