一、概述

1、何为svn?
Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统;用来管理文档,程序代码等文档的版本;svn相对git来说有点古老,是一个中心控制的版本控制系统,时至今日仍有不少企业依然使用svn做为代码等文档的管理服务;
今天我们就来先介绍下在CentOS7下安装部署svn服务与日常使用以及重点介绍svn的两个hooks使用;
2、环境介绍
Svn server:CentOS7.4_x64 ip:172.16.3.167 subversion 1.97 (最新稳定版);何用yum安装
关闭selinux 关闭防火墙(生产线上务必添加好防火墙规则)
测试端win7 下载安装Tortoisesvn客户端请下载与系统版本对应的客户端软件

3、安装Subversion

添加repo源
[root@localhost ~]# cat /etc/yum.repos.d/svn.repo
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/
enabled=1
gpgcheck=0安装
[root@localhost ~]# yum install subversion -y

注意 系统自带源中安装的是1.7.x的版本,所以通过此源安装最新的版本;

二、svn服务器的配置

1、添加到系统服务
默认安装完安装包中不提供systemd服务,因此需要自行配置,以下是我的配置

[root@localhost ~]# cat /usr/lib/systemd/system/svnd.service
[Unit]
Description=subversion server daemon
Documentation=man:svn(8) man:svn(5)
After=network.target

[Service]
Type=forking
#User=svn
#Group=svn
EnvironmentFile=/etc/sysconfig/svnd      ##相关配置参数所在文件
ExecStart=/usr/bin/svnserve -d --listen-port $PORT --pid-file $pid_file --log-file $log_file -r $SVN_HOME
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=20s

[Install]
WantedBy=multi-user.target

[root@localhost ~]# cat /etc/sysconfig/svnd
##Configure for subversionpid_file=/var/run/svn.pid
SVN_HOME=/data1/svn_data/projects      #svn主数据目录
log_file=/var/log/svnd.log
PORT=33690                  #自定义端口为33690# systemed服务重载
[root@localhost ~]# systemctl daemon-reload

说明:以上的参数均是通过 svnserve --help 获取配置进去的!
创建目录
mkdir -pv /data1/svn_data/projects

启动服务

[root@localhost ~]# systemctl start svnd
[root@localhost ~]# systemctl status svnd
● svnd.service - subversion server daemonLoaded: loaded (/usr/lib/systemd/system/svnd.service; disabled; vendor preset: disabled)Active: active (running) since 五 2018-01-26 15:39:22 CST; 30min agoDocs: man:svn(8)Process: 4347 ExecStart=/usr/bin/svnserve -d --listen-port $PORT --pid-file $pid_file --log-file $log_file -r $SVN_HOME (code=exited, status=0/SUCCESS)Main PID: 4348 (svnserve)CGroup: /system.slice/svnd.service└─4348 /usr/bin/svnserve -d --listen-port 33690 --pid-file /var/run/svn.pid --log-file /var/log/svnd.log -r /data1...
1月 26 15:39:22 localhost.localdomain systemd[1]: Starting subversion server daemon...
1月 26 15:39:22 localhost.localdomain systemd[1]: Started subversion server daemon.添加开机启动:
[root@localhost ~]#  systemctl enable svnd

2、添加账号
由于添加账号和密码比较频繁与繁琐,因此编写脚本处理,参考如下:

#!/bin/bash
#Author: san
#version: 1.0
#date: 2018-01-26
###########################
SvnDataDir=/data1/svn_data/projects
pre_commit_config=${SvnDataDir}/pre-commit
[ -d ${SvnDataDir}/CodeAuth ] || mkdir -pv ${SvnDataDir}/CodeAuth
[ -f ${SvnDataDir}/CodeAuth/authz ] || touch ${SvnDataDir}/CodeAuth/authz
[ -f ${SvnDataDir}/CodeAuth/passwd ] || touch ${SvnDataDir}/CodeAuth/passwdprog="$1"
if [ $# -eq 0 ]
then
echo  "Have no project's name input,progame exit." && exit 0
fi
cd $SvnDataDir
[ -d $prog ]|| mkdir -p ${SvnDataDir}/$prog
read -p "Give a paassword:-> " propwd
#echo $propwd >>propwd.txt/usr/bin/svnadmin create $SvnDataDir/$prog
cd $SvnDataDir/$prog/conf
if [ -f ${SvnDataDir}/CodeAuth/passwd ]thenecho "$prog = $propwd" >>${SvnDataDir}/CodeAuth/passwd
elseecho "[users]" >>${SvnDataDir}/CodeAuth/passwdecho "$prog = $propwd" >>${SvnDataDir}/CodeAuth/passwd
fi
echo "[$prog:/]" >>${SvnDataDir}/CodeAuth/authz
echo "$prog = rw" >>${SvnDataDir}/CodeAuth/authzsed -i 's/^# anon-access = read/anon-access = none/g' svnserve.conf
sed -i 's/^# auth-access = write/auth-access = write/g' svnserve.conf
sed -i 's/^# password-db = passwd/password-db = \/data1\/svn_data\/projects\/CodeAuth\/passwd/g' svnserve.conf
sed -i 's/^# authz-db = authz/authz-db = \/data1\/svn_data\/projects\/CodeAuth\/authz/g' svnserve.conf
sed -i "s/^# realm = .*./realm = $prog projects /g" svnserve.confcp $pre_commit_config ${SvnDataDir}/$1/hooks/ && chmod +x ${SvnDataDir}/$1/hooks/pre-commit
systemctl restart svnd

添加可执行权限 
[root@localhost ~]# chmod +x add.sh

说明:脚本中有一个pre-commit文件,这个文件是svn hooks 钩子之一,用于控制向版本库中提交时的动作;比如很多开发人员提交代码到库中时不填写备注信息,导致后期回滚时或检查时找不到对应的说明,因此可以通过pre-commit钩子来强性让提交代码时填写点信息;这个文件默认是shell可执行文件;也可以是其他语言写的可执行文件;
以下就是强制提交代码时需要填写信息的钩子,作为默认的模板放在svn数据根目录下~

[root@localhost ~]# cat /data1/svn_data/projects/pre-commit
#!/bin/bash
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
#$SVNLOOK log -t "$TXN" "$REPOS" | \
#   grep "[a-zA-Z0-9]" > /dev/null || exit 1
# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
#commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5 ];#要求注释不能少于5个字符,您可自定义
thenecho -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2exit 1
fi
# All checks passed, so allow the commit.
exit 0

此时就可以通过add.sh脚本来添加一个svn库(账号和库同名);如添加san账号也在/data/svn_data/projects/下创建了针对san的svn版本库,示例如下:

[root@localhost projects]# ./add.sh san
mkdir: 已创建目录 "/data1/svn_data/projects/CodeAuth"
Give a paassword:-> 123.com
[root@localhost projects]# ls
add.sh  CodeAuth  pre-commit  san
[root@localhost projects]# cat CodeAuth/authz
[san:/]
san = rw
[root@localhost projects]# cat CodeAuth/passwd
[users]
san = 123.com

到此svn server配置完成;接下看看客户端的使用!

三、svn客户端使用

1、安装Tortoisesvn
下载地址看上面,安装很方便直接下一步到完成!

2、添加版本库
在桌面上新建一个文件夹名字随便取这里叫work
把work目录作为库目录checkout 如下:

弹出如下:填写版本库地址并输入账号密码

点击OK 如图:表示版本库配置成功!

3、向版本库提交文档
在库文件夹中创建1.txt文件添加到库中再提交如图:



如果不添加备注信息则无法提交成功,出现如下图所示:

以上步聚如果在linux下可以使用命令行处理;
checkout 目录为版本库目录
svn co svn://172.16.3.167:33690/san --username san --password 123.com 目录
如添加文件到版本库
svn add 1.txt
提交到库
svn commit -m "说明信息"
这里就不多说了!

四、svn之post-commit钩子使用

1、post-commit钩子说明
post-commit钩子默认和pre-commit钩子一样是没有启用的(所有钩子函数默认都没有 启用);但默认都有一个模板;位置在版本库的hooks下;如san账号对应的版本库

[root@localhost hooks]# ls
post-commit.tmpl  post-revprop-change.tmpl  pre-commit       pre-lock.tmpl            pre-unlock.tmpl
post-lock.tmpl    post-unlock.tmpl          pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl

2、使用post-commit

通过模板复制成post-commit
[root@localhost hooks]# cp post-commit.tmpl post-commit
默认内容如下:
[root@localhost hooks]# egrep -v '(^$|^#)' post-commit
REPOS="$1"
REV="$2"
TXN_NAME="$3"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

让我们修改下,效果是:当我们使用san账号往san库中提交时,让post-commit给我发一份邮件包含版本号,提交时间,提交内容等信息;

[root@localhost hooks]# cat post-commit
#!/bin/bash
export LANG=en_US.UTF-8
REPOS="$1"
REV="$2"
LOGFILE=/data1/svn_data/projects/san/hooks/changedir.log
exec 1>>"$LOGFILE"
exec 2>&1SVNLOOK=/usr/bin/svnlook
TIME=$(date "+%Y-%m-%d %H:%M:%S")
#提交作者
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")
#修改的目录集合
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS)
#提交时的备注信息,不建议用中文
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")
echo "$CHANGEDDIRS" >>/data1/svn_data/projects/san/hooks/changedir.log
#获取修改子项目目录名
Rsync_Dir=`echo $CHANGEDDIRS |awk -F / '{print $1}'`
#echo "$Rsync_Dir at `date`" >/tmp/testdir.log
function myecho() {echo "$TIME" "$*"
}myecho "**************************************************************"
myecho "提交版本:$REV 作者:$AUTHOR"
myecho "提交备注:$MESSAGE"
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录echo "$AUTHOR 代码更新成功,版本:$REV请熟知 时间:`date +%Y-%m-%d-%H:%M:%S`.项目内容:$Rsync_Dir" | mail -s "$AUTHOR 代码更新OK" xxxxxxxx@qq.com     #换成你的邮箱

注意:这里的mail命令如果系统中没有 ,需要yum install mailx -y;
再对版本库进行提交动作时就会向指定邮箱中发送邮件 ,发送多个邮箱地址需要空格隔开;
你会发现QQ邮箱默认当作垃圾邮件,因为你没有 备案 不是合法公网ip来源;如果这台主机备案过绑定过域名一般没有 这个问题,这里只测试下逻辑!
如图:

总结:

我们通过svn管理版本,可以实现提交,回溯版本的功能,通过svn hooks可以完成提交前的处理,和提交后的处理工作;这里只是抛砖引玉,一般中小企业可以使用,比如提交后结合 rsync把更新的内容推到前端服务器上;但需要注意rsync时排除一些配置文件;网页形式的svn构建请看这里http://blog.51cto.com/dyc2005/1942131

本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/2065565,如需转载请自行联系原作者

CentOS7安装配置svn及svn hook实战相关推荐

  1. Centos7 安装配置 tomcat 并设置自动启动

    Centos7 安装配置 tomcat 并设置自动启动 下载安装包 这里选择适合Linux的安装包,下载到本地后上传到centos服务器,或者直接通过wget命令下载 1 2 3 4 # cd /us ...

  2. vnc安装linux教程,Centos7安装配置vncserver详细教程

    CentOS7安装配置vncserver教程 一.安装VNC 首先要保证目标服务器安装有图形化环境,Linux系统下常见的桌面环境有GNOME和KDE,这里我们首先通过Group的方式安装GNOME桌 ...

  3. centos7安装配置vsftp搭建FTP

    参考文章: CentOS7下安装FTP服务 详解CentOS7安装配置vsftp搭建FTP centos7之vsftp安装和使用 1.安装vsftp # 查看是否已安装 方法一 [root@local ...

  4. Centos7 安装,配置静态IP

    Centos7 安装,配置静态IP 本文采用桥接方式 镜像地址 下载好镜像后使用vmware虚拟机进行安装即可(注意设置root密码). 安装完成后使用root登录,输入设置好的密码 设置静态ip v ...

  5. CentOS7 安装配置FTP服务器详解

    CentOS7 安装配置FTP服务器详解 1.FTP简介 ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服 ...

  6. CentOS7 安装配置SFTP服务器详解

    CentOS7 安装配置SFTP服务器详解 1.SFTP简介 SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protoc ...

  7. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强 ...

  8. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube

    1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候 ...

  9. centos7 安装配置mesos+marathon+zookeeper

    2019独角兽企业重金招聘Python工程师标准>>> 1,mesos介绍 Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache Incubator中的项目.M ...

  10. 安装部署 —— CentOS6/CentOS7 安装配置mysql 5.7

    本文记录下使用CentOS6.5 和7 使用yum安装mysql的过程&一些常见问题 CentOS7 安装MySQL8:CentOS7安装MySQL8.0图文教程_闰土的猹猹君的博客-CSDN ...

最新文章

  1. UIView 的 autoresizingMask 属性 详解。
  2. html div背景半透,css半透明背景实现方法
  3. (转)Android 使用com.j256.ormlite
  4. JSP 标准标签库(JSTL)
  5. AXI quad SPI没有输出
  6. 安装rabbitmq和php扩展
  7. Oracle---对字段进行修改(varchar2修改clob)+ 索引失效
  8. 【Linux系统编程】进程常用调度算法
  9. leetcode 69. x 的平方根(C语言)
  10. 博弈论进阶之Anti-SG游戏与SJ定理
  11. vis.js入门_使用TensorBoard数据Vis的TensorFlow手术分类器入门
  12. php emoji处理微信表情
  13. icassp2021论文集下载
  14. 计算机科学类期刊排名,计算机学术期刊排名:Computer Science Journal Ranki
  15. 量化交易入门阶段——MACD的背离用法(一)——DIFF背离
  16. mysql库函数说明_MySQL 数据库函数库
  17. Android齐刘海适配完全攻略
  18. avi格式视频转换高清mp4的方法
  19. MongoDB的基本操作(创建数据库,数据表,查询数据表信息)
  20. 数据融合课程设计——案例二 股票价格涨跌趋势预测

热门文章

  1. 利用VX助手增加编程效率
  2. dubbo+zookeeper+dubboadmin环境搭建
  3. CPU瓶颈(五)--过度编译与不必要重复编译的解决方案
  4. 通过自动化接口调用InstallShield 报错的解决办法
  5. 国外高手又一力作,CAML Builder
  6. linux 安装weblogic12.1.3.0步骤
  7. day7-mysql引擎和索引
  8. SpringMvc @PathVariable 工作原理
  9. close与volume的相关性
  10. Java应用基础微专业-设计篇