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
#...
source /etc/profile
Svn_Url='svn://192.168.1.100/svnrepos'
Web_Dir='/data/www/'
SVN=/usr/bin/svn
User=admin
Pass=admin456
$SVN --username $User --password $Pass co $Svn_Url $Web_Dir --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 

官网下载地址

https://tortoisesvn.net/downloads.html