一、简介
本文以Centos8为例,介绍如何在Linux服务器上搭建SVN服务,本地window使用SVN+TortoiseSVN进而实现对代码/项目的版本控制,附配置Hook钩子实现服务器自动拉取代码同步更新到服务器端。
二、准备工作
2.1服务器安装SVN
yum install -y subversion
2.2本地安装SVN+TortoiseSVN
自行百度下载SVN及TortoiseSVN客户端安装到window即可。
三、创建SVN版本库
Centos服务器下创建SVN版本库。
假设我们本次项目名称为Demo,如下,在服务器/根目录下的svnRepositories文件夹下创建我们的Demo项目SVN版本库:
# 根目录的svnRepositories下创建项目SVN版本库文件夹,demo为你的项目名称。
mkdir -p /svnRepositories/demo
# 创建项目SVN版本库
svnadmin create /svnRepositories/demo
四、配置服务器SVN版本库
创建了我们的SVN版本库后,SVN会在/svnRepositories/demo目录下创建以下几个文件夹:conf、db、hooks、locks,我们主要配置conf目录下配置文件。
配置目录 conf 主要有三个文件:
- authz:仓库访问权限文件
- passwd:仓库用户名和密码文件
- svnserve.conf:综合服务配置文件
4.1配置用户名密码文件 passwd
全选删除,配置如下信息。
[users]
zhangsan = 123456
其中,zhangsan为本版本库下的用户的用户名,123456为该用户的密码,同一版本库下可配置多个可使用用户。
4.2配置权限配置文件 authz
全选删除,配置如下信息。
[groups]
[/]
zhangsan=rw
即用户zhangsan用户该版本库的rw读写权限,按需配置即可。
4.3配置综合配置文件 svnserve.conf
保留如下配置信息即可。
[general]
# 匿名访问的权限,可以是read、write,none,默认为read
anon-access = read
# 使授权用户有写权限
auth-access = write
# 密码数据库的路径
password-db = passwd
# 访问控制文件
authz-db = authz
[sasl]
五、启动SVN服务
# 启动svn服务,若服务器重启,需要重新开启。
svnserve -d -r /svnRepositories/demo
若启动失败,优先检查路径及3690端口,或关闭防火墙后尝试。
六、服务器Checkout项目
在服务器实际项目的路径下checkout到我们刚创建的版本库。
# 假设项目在www/wwwroot/demo下:
svn checkout svn://xxx.xx.xxx.xx/demo ./ --username zhangsan
其中xxx.xx.xxx.xx为服务器的ip地址,demo为我们刚创建的版本库名称,zhangsan为用户名。
七、服务器提交项目代码到版本库
# 项目路径下,如www/wwwroot/demo,把项目加入到SVN版本库
svn add *
上述命令会将目录下所有文件添加到SVN版本库中,也可以选中部分添加,如下。
# 添加app目录下所有
svn add app/
# 添加某个文件
svn add index.php
# 遍历当前目录下的所有未添加的文件,添加到版本库
svn add . --no-ignore --force
添加到版本库后,还需要进行提交。
# 还是在项目路径下,""内是我们的提交附加信息
svn commit -m "提交"
八、window本地Checkout项目
指定文件夹下右键选择checkout(没有此指令请检查前期准备)
填写所需信息,其中xxx.xx.xxx.xx还是我们服务器IP地址,demo为版本库名称,并非项目目录名称。
点击ok 等待checkout完毕后,在目录下update版本库代码。
等待update完成后,即可看见本地已经将刚刚在服务提交的项目代码完整拉取下来了。
九、配置Hook钩子
回到我们的服务器demo版本库,还记得版本库下那几个文件夹吗,我们一开始只修改了conf文件夹,现在我们打开hooks文件夹,里面有好几个文件,我们只取其中的一个即可:post-commit.tmpl。
1.复制post-commit.tmpl并改名为post-commit(即去掉后缀),或者直接修改为post-commit。
2.全选删除,配置内容如下:
export LC_CTYPE="zh_CN.UTF-8"
SVN=/usr/bin/svn #svn的安装路径
WEB_PATH=/www/wwwroot/demo #要执行hook更新的目录
SVN_USER=zhangsan #svn账户
SVN_PASS=123456 #svn密码
$SVN update $WEB_PATH --username $SVN_USER --password $SVN_PASS #执行更新
修改完毕后,本地修改项目代码或文件,commit提交到服务器后,SVN会自动拉取修改内容并同步更新到我们的项目中去,从而减少我们二次手动在服务器端update的工作,很赞!