SVN版本控制 + 钩子脚本自动同步到WEB
一、安装和配置版本库
1.安装subversion
SVN# yum -y install subversion
2.创建版本库
SVN# mkdir -p /var/svn/svnrepos
SVN# svnadmin create /var/svn/svnrepos
//创建版本库后有以下目录
assest conf db format hooks locks README.txt
//conf目录下的文件
authz 权限控制文件
passwd 帐号密码文件
svnserve.conf SVN服务配置文件
3.配置版本库
SVN#cd /var/svn/svnrepos/conf
1)设置帐号密码
SVN# vim passwd
admin = admin456
zhangsan = 123456
lisiuser = 654321
在[users]块中添加用户和密码,格式:帐号 = 密码,如zhangsan = 123456
直接在文件后面添加就可以了
2)设置权限
SVN# vim authz
在末尾添加如下代码:
[/]
admin = rw
zhangsan = rw
//给zhangsan用户根的权限可读写
[/html]
lisiuser = rw
//给lisiuser用户授权根下的html目录授权rw。
如果用户太多可以用*代替用户名
* = rw
//给所有的用户授权
3)修改svnserve.conf文件
SVN# vim svnserve.conf
去掉下面的几个注释:
anon-access = none #(置为 anon-access = none,这样的话 SHOW LOG 才能看到历史版本)
auth-access = write #授权用户可写
password-db = passwd #账号配置文件
authz-db = authz #权限配置文件
realm = /var/svn/svnrepos # 认证空间名,版本库所在目录。
---------
如果有多个版本库
svnadmin create /var/svn/svnrepos1
svnadmin create /var/svn/svnrepos2
svnadmin create /var/svn/svnrepos3
配置是独立的,用户名和密码和权限也是独立的。
4.启动svn
SVN# svnserve -d -r /var/svn
这样三个版本库了启动了,
对应的URL:
svn://IP/svnrepos1
svn://IP/svnrepos2
svn://IP/svnrepos3
SVN默认端口是3690,启动时可以指定监听端口。
svnserve -d -r /var/svn --listen-port 1964
5.检查SVN是否启动和监听端口
SVN# netstat -anput | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 7838/svnserve
SVN 配置完成,
————————————————
二、将现有项目文件加入SVN版本控制
因为项目已经在线上运行了,所以得先把运行中的文件导入到版本库,形成第一个版本。
我的项目在/data/www/目录
1.把svn版本库中的空目录检出到www目录
#svn --username admin --password admin456 checkout svn://192.168.1.100/svnrepos /data/www/ --no-auth-cache
2.把当前目录下的所有文件添加进版本库,
#svn --username admin --password admin456 add ./* --no-auth-cache
3.把当前目录下的所有文件添提交到版本库,
#svn --username admin --password admin456 commit ./* -m 'test' --no-auth-cache
注意:
如果后期添加新文件
在/data/www/目录下查询svn控制状态
#svn status
带问号 ? 的文件和目录是没有加入到版本库中
使用 add 添加
带问号 A 的文件和目录是已经加入到版本库,但是还没有提交到版本库。
使用 commit 提交
加入版本库后,会出现.svn 的隐藏文件
.svn文件是subversion的版本控制信息文件
当某个目录处于subversion的版本控制时,在这个目录中就会.svn这个文件夹,
这个.svn文件夹中的文件就是一些版本信息文件,供subversion使用,一般不要人为去改这些文件。
————————————————
三、钩子脚本自动同步到WEB
1.创建钩子脚本,同步数据到Web目录
在项目的目录下 /var/svn/svnrepos/test1/hooks/
创建一个文件 post-commit
#vim /var/svn/svnrepos/test1/hooks/post-commit
#!/bin/sh
#SVN钩子脚本
REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
/usr/bin/svn update --username admin --password admin456 /data/www/ --no-auth-cache
#/usr/bin/svn --username admin --password admin456 checkout svn://192.168.1.100/svnrepos /data/www/ --no-auth-cache
注意文件要+X 权限
chmod +x /var/svn/svnrepos/test1/hooks/post-commit
脚本说明:
User是用户名 ,Pass是密码。
co checkout的简写,是svn的命令参数
Svn_Url 服务器URL地址 ,svnrepos是创建的项目。
Web_Dir 是我的网站目录(就是数据提交后会自动同步到此目录)
--no-auth-cache (一定要加,不然会报错)忽略密码提示安全。
-------------------------------------------------
防火墙允许3690端口
iptables -A INPUT -p TCP --dport 3690 -j ACCEPT
Windows客户端工具推荐
TortoiseSVN
官网下载地址