一:什么是SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
二:SVN的特性
1:数据存储
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
2:运行方式
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
3:优缺点简述
3.1:速度
CVS比较慢。
整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(完全备份所有的工作文件)。
3.2:标志&分支
SVN采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。
3.3:文件类型
SVN会关心所有的文件类型,不需要你来手工操作。
CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。
三:安装SVN服务器
独立服务器安装方式简单,不再解释。本教程安装借助Apache运行的SVN服务器。
1:安装环境
CentOS
2:使用账户
root根用户。此用户为系统根用户,拥有最高权限。SVN服务需要频繁访问系统资源,使用root用户可以避免一些不必要的麻烦。且SVN服务器通常为独立服务器,使用root用户可以更好的管理服务器资源。
3:安装Apache HTTP Server
3.1:前置准备
在安装前,可以更新当前操作系统,减少漏洞。
更新命令 : yum update
更新系统后,需要重新启动操作系统。
重启命令 : reboot
3.2:安装Apache HTTP Server
命令:yum install httpd httpd-devel -y
3.3:修改配置
命令:vim /etc/httpd/conf/httpd.conf
找到ServerName配置位置(vim编辑器命令模式下输入:/ServerName),修改内容如下:
ServerName localhost:80
3.4:修改防火墙配置
开放80端口访问权限
命令:vim /etc/sysconfig/iptables
增加下述内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
修改后,重启防火墙服务
命令:
CentOS:service iptables restart
CentOS7:/bin/systemctl restart iptables.service
3.5:启动Apache HTTP Server服务
命令:
CentOS:service httpd start
CentOS7:/bin/systemctl start httpd.service
3.6:测试访问
使用浏览器访问对应服务。本教程使用Linux虚拟机IP为:192.168.206.11。访问地址为:http://192.168.206.11/。访问结果如下:
4:安装SVN服务
4.1:停止Apache HTTP Server
命令:
CentOS:service httpd stop
CentOS7:/bin/systemctl stop httpd.service
4.2:安装SVN模块
命令 :
yum install mod_dav_svn subversion
4.3 :检查svn模块安装结果
当svn模块安装成功后,在/etc/httpd/modules/目录中会有对应信息产生,可使用下述命令查看:
命令为:
ls /etc/httpd/modules | grep svn
结果如下:
mod_authz_svn.so
mod_dav_svn.so
也可以使用svn模块命令查看
命令为:
svn --version
结果如下:
svn, version 1.6.11 (r934486)
compiled Aug 17 2015, 08:37:43
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository access (RA) modules are available:
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- with Cyrus SASL authentication
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
4.4:为SVN创建主目录
本教程将svn仓库主目录保存在系统根目录下,可根据具体情况修改。
命令
mkdir /svn
4.5:修改SVN配置信息
svn配置文件保存在目录/etc/httpd/conf.d/目录中,配置文件命名为:subversion.conf。此配置文件是在安装mod_dav_svn时自动创建的。
命令 :
vim /etc/httpd/conf.d/subversion.conf
在配置文件中增加下述内容:
#Include /svn/httpd.conf
<Location /svn/> # 本地仓库目录位置。4.4节点创建的位置
DAV svn # 模型简述
SVNListParentPath on # 开启上级目录列表能力
SVNParentPath /svn # 上级目录列表根目录。 4.4节点创建的位置
AuthType Basic # 授权类型,
AuthName "Subversion repositories" # 拥有者名称
AuthUserFile /svn/passwd.http # 拥有者用户文件命名
AuthzSVNAccessFile /svn/authz # 用户授权文件命名
Require valid-user
</Location>
RedirectMatch ^(/svn)$ $1/
4.6:创建密码文件和授权文件
命令 :
touch /svn/passwd.http
touch /svn/authz
5:安装MySQL数据库
此数据库专为SVN服务器提供数据存储。与业务系统数据库分离。
5.1:CentOS6安装MySQL
//检查当前系统中是否安装了MySQL
rpm -qa | grep mysql
//安装MySQL
yum install mysql-server mysql mysql-devel
//启动MySQL服务
CentOS:service mysqld start
//检查MySQL服务状态
service mysqld status
//修改防火墙配置开放3306端口访问权限。
vim /etc/sysconfig/iptables
//增加下述内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
//修改后,重启防火墙服务
service iptables restart
//设置MySQL数据库root用户初始密码
mysqladmin -uroot password 'yourPassword'
//连接MySQL数据库
mysql -uroot -p
//为MySQL数据库root用户授权,在默认情况下,MySQL数据库中的root用户只能本地访问。需要为此用户授予远程访问权限,否则无法在远程或其他应用中使用root用户访问MySQL数据库。MySQL中的命令 :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourPassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
//查看授权信息,MySQL中的命令 :
select user, host from mysql.user;
//其中user为MySQL数据库用户名, host为可访问的地址(%代表所有位置都可访问)。
5.2:CentOS7安装MySQL
//下载MySQL官方的 Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
//yum安装Yum Repository
yum -y install mysql57-community-release-el7-10.noarch.rpm
//安装MySQL服务器。
yum -y install mysql-community-server
//启动MySQL服务
Centos7:/bin/systemctl start mysqld.service
//检查MySQL服务状态
Centos7:/bin/systemctl status mysqld.service
//修改防火墙配置开放3306端口访问权限。
vim /etc/sysconfig/iptables
//增加下述内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
//修改后,重启防火墙服务
Centos7:/bin/systemctl restart iptables.service
//查看初始密码
grep 'temporary password' /var/log/mysqld.log
//连接MySQL数据库
mysql -uroot -p
//重置密码
alter user user() identified by "-rhYV.=qe9VC";
//更改密码规则
set global validate_password_policy=LOW;
set global validate_password_length=4;
//更改简单密码
alter user user() identified by "root";
//为MySQL数据库root用户授权,在默认情况下,MySQL数据库中的root用户只能本地访问。需要为此用户授予远程访问权限,否则无法在远程或其他应用中使用root用户访问MySQL数据库。MySQL中的命令 :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourPassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
//查看授权信息,MySQL中的命令 :
select user, host from mysql.user;
//其中user为MySQL数据库用户名, host为可访问的地址(%代表所有位置都可访问)。
5.3:测试远程连接
mysql -uroot -proot -h192.168.206.11 -P3306
6:安装svnadmin
6.1:简介
Svn Admin是一个Java开发的管理Svn服务器的项目用户的web应用。安装好Svn服务器端好,把Svn Admin部署好,就可以通过web浏览器管理Svn的项目,管理项目的用户,管理项目的权限。使得管理配置Svn简便,再也不需要每次都到服务器手工修改配置文件。本教程中使用的版本为:3.0.5。svnadmin资源在googlecode平台中,网址为:
https://code.google.com/p/svnadmin
6.2:svnadmin的优点
多数据库:Svn项目配置数据保存在数据库,支持所有数据库(默认MySQL/Oracle/SQL Server)。
多操作系统:支持Window,Linux等操作系统。
权限控制:管理员可以随意分配权限、项目管理员可以管理项目成员、成员只能查看和修改自己的密码。
支持多项目、多用户、多用户组Group(默认带有“项目管理组”、“项目开发组”、“项目测试组”)。
安全:密码加密保存。
多协议:支持svn协议和http协议(从2.0开始支持Apache服务器单库方式,从3.0开始支持Apache多库方式)
仓库浏览(从3.0.2开始)
多语言(从3.0.2开始)
6.3:安装Tomcat
参考:
https://blog.youkuaiyun.com/qq_36297434/article/details/83928241
6.3.4:配置防火墙权限
开放8080端口访问权限
命令 : vim /etc/sysconfig/iptables
增加下述内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
修改后,重启防火墙服务
命令:
CentOS:service iptables restart
CentOS7:/bin/systemctl start mysqld.service
6.4:部署svnadmin
将svnadmin.war上传到Tomcat/webapps/目录中,并解压缩。svnadmin-3.0.5.zip文件中包含db目录,svnadmin.war应用。db目录中保存的是svnadmin需要使用的数据库脚本文件。
解压svnadmin.war
unzip svnadmin.war -d svnadmin
6.5:修改svnadmin应用配置
命令 : vim /opt/module/tomcat7/webapps/svnadmin/WEB-INF/jdbc.properties
修改内容如下
db=MySQL
#MySQL
MySQL.jdbc.driver=com.mysql.jdbc.Driver
MySQL.jdbc.url=jdbc:mysql://127.0.0.1:3306/svnadmin?characterEncoding=utf-8
MySQL.jdbc.username=root
MySQL.jdbc.password=root
6.6:创建database
6.6.1:连接MySQL
命令 : mysql -uroot -p
6.6.2:创建database
MySQL中的命令 : create database svnadmin default charset utf8 collate utf8_general_ci;
6.6.3:使用database
MySQL中的命令 : use svnadmin
6.6.4:执行脚本文件
假如db目录保存在/opt/目录中。
MySQL中的命令 :
source /opt/db/mysql5.sql
source /opt/db/lang/en.sql
6.7:启动http服务
命令:
CentOS:service httpd start
CentOS7:/bin/systemctl start httpd.service
6.8:启动Tomcat
/opt/module/apache-tomcat-7.0.68/bin/startup.sh & tail -f /opt/module/apache-tomcat-7.0.68/logs/catalina.out
6.9:测试访问
http://192.168.206.11:8080/svnadmin
7:管理版本仓库
7.1:初始化管理账户
本教程使用root用户,密码为root。
7.2:创建版本库
创建的版本仓库任意信息包含中文,必须要求,数据库的对应database字符集支持中文,数据库导入的sql文件必须有en.sql数据,tomcat中的server.xml配置文件中必须增加URIEncoding=”UTF-8”信息。
如创建仓库失败,试着执行以下命令
sudo chmod 777 /svn
在版本库创建成功后,在Linux系统中,会有一个目录与之对应。目录为:/svn/sxt_svn。
在之前创建的/svn目录中会有新文件httpd.conf创建。其中内容和/etc/httpd/conf.d/subversion.conf一致。
/svn/authz授权文件中会有如下内容:
[aliases]
[groups]
sxt_svn_developer=
sxt_svn_manager=
sxt_svn_tester=
[sxt_svn:/]
@sxt_svn_manager=rw
7.3:用户权限问题
7.3.1:为SVN仓库分配用户
7.3.3:测试用户访问权限
在创建好版本仓库并分配好用户后,在访问版本仓库的时候会出现认证失败错误。
上述错误出现的原因是:/svn目录中的仓库对应目录信息为root用户创建的,其他用户是没有访问权限的。而我们在访问SVN仓库的时候,是需要通过Apache的HTTP Server来访问的。这个时候,对SVN仓库目录的访问用户不再是root,而是apache。此用户的信息可以通过Apache HTTP Server的配置文件查看(/etc/httpd/conf/httpd.conf)。具体如下:
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
# . On HPUX you may not be able to use shared memory as nobody, and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!
#
User apache
Group apache
也就是说,此时访问SVN仓库目录的用户是apache组中的apache用户。 需要将仓库目录的拥有者变更为apache用户。具体命令如下:
chown -R apache.apache sxt_svn
命令解释: chown -R 组.用户 要修改拥有者的目录名。
每次新增SVN仓库(项目)时,都需要修改目录拥有者。
7.3.3:关闭seLinux
在修改SVN仓库目录拥有者后,仍旧没有对仓库的访问权限。此时就是seLinux的问题了。我们通过配置文件来管理seLinux即可。
命令 : vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUX=enforcing # 修改前
SELINUX= disabled # 修改后
重启Linux即可:
命令为 : reboot
7.3.4:结果显示
7.4:仓库授权
当权限问题解决后,开始为我们的版本仓库提供用户和授权管理。
7.4.1:创建用户
7.4.2:用户组管理
7.4.3:用户组授权
7.4.4:授权文件的变化
修改用户和权限后都会有对应的授权文件和MySQL数据信息变化。主要集中在MySQL数据库svnadmin.usr表和Linux系统/svn/passwd.http文件中。
svnadmin.usr表内容如下:
/svn/passwd.http文件内容如下:
admin:{SHA}3Hbp8MAAbo+RngxRXGbbujmC94U=
test_svn:{SHA}3Hbp8MAAbo+RngxRXGbbujmC94U=