快速搭建企业subversion
Posted 尹正杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速搭建企业subversion相关的知识,希望对你有一定的参考价值。
快速搭建企业SVN(subversion)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
我们公司用的版本控制控制系统就是subversion(简称SVN),不得不说这是一款比较好使的管理工具。我们公司用的就是这个去完成一些列的工作,我的工作也几乎天天要跟着SVN打交道,比如部署接口什么的,如果有新的分支的话需要登录堡垒机服务器去checkout代码~
一.什么是SVN?
1>.SVN(subversion)是今年来崛起的版本管理工具,与CVS一样,SVN是一个跨平台的开元的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中英资料档案库中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以吧档案回复到旧的版本,或是浏览文件的变动历史。
2>.SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。
3>.相对于大多数公司来说,SVN是最普及的,其他版本控制比较流行的还有GIT。
4>.SVN是一个通用的软件系统,它不但可以用来管理程序源码,他还可以管理任何类型的文件,如文本,视频,图片等等。
相关站点:http://subversion.apache.org/
二.SVN的服务器运行模式与访问方式
1.SVN服务端运行模式
SVN常见的有三种运行访问方式,本篇博客采取第一种运行方式。
a>.独立服务器(例如:svn://svn.yinzhengjie.com/jky);
b>.借助Apache(例如:http://svn.yinzhengjie.com/jky);
c>.本地直接访问(例如:file:///yinzhengjie/svndata/jky);
2.svn客户端访问方式
Subversion可以通过多种方式访问,如本地磁盘访问或各种各样不同的网络协议,但是一个版本库地址永远都是一个URL。
方式一:“file:// ”
访问方法:直接版本库访问(本地磁盘或网络磁盘)
方式二:“http://”
访问方法:通过WebDAV协议访问支持Subversion的Apache服务器。
方式三:“https://”
访问方法:与“http://”相似,但是用了SSL加密。
方式四:“svn://”
访问方法:通过未认证的TCP/IP自定义协议访问svnserve服务器。
方式五:“svn + ssh://”
访问方法:通过认证未加密的TCP/IP自定义协议访问svnserve服务器。
三.SVN的数据格式
SVN存储版本数据也有2中方式,即BDB(一种事物安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
CVS是一个基于RCS文件的版本控制系统,每个CVS文件都不过是普通的文件,加上一些额外的信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据丢失。如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库的(BerkleyDB)或一些了二进制文件的(FS_FS).一方面这解决了许多问题(例如:并行读取共享文件)以及添加了许多新功能(例如:运行时事物特性)。然而另一方面,数据存储由此变得不透明。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie 4 EMAIL:y1053419035@qq.com 5 */ 6 7 8 扩展小知识: 9 10 1>.BDB 11 12 伯克利DB(Berkeley DB),版本库可以使用一种经过充分测试的后台数据库实现,不能再通过网络共享的文件系统上使用,伯克利DB是Subversion 1.2版本以前缺省版本库格式。 13 14 2>.FSFS 15 16 一个专用于Subversion版本库的文件系统后端,可以使用网络文件系统(例如NFS或SMBFS)。是1.2版本机器以后的版本库的默认后端。 17 18 3>. 版本库数据存储对照表 19 在Subversion1.2中,版本库中存储数据有两种方式。一种是在Berkeley DB数据库中存储数据;另一种是使用普通的文件,使用自定义格式。因为Subversion的开发者称版本库为(版本化的)文件系统,他们接受了称后一种存储方式为FSFS的习惯,也就是说,使用本地操作系统文件系统来存储数据的版本化文件的系统。 20 建立一个版本库时,管理员必须决定使用Berkeley DB还是FSFS。它们各有优缺点,我们将详细描述。这两个中并没有一个是更正式的,访问版本库的程序与采用哪一种实现方式无关。访问程序并不知道版本库如何存储数据,它们只是从版本库的API读取到修订版本和事务树。
如果感兴趣的小伙伴可以参考一下原链接:http://svndoc.iusesvn.com/svnbook/svn.reposadmin.html#svn.reposadmin.basics.backends
四.SVN系统的逻辑架构图
五.集中式的版本管理系统
1 集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本都放在服务器上,如果脱离了服务器,开发者就无法工作。 2 3 下面举一个生产环境中案例: 4 5 周一到来了,开始新的一天的工作: 6 7 1>.从服务器下载项目组最新代码; 8 9 2>.进入自己的分支,进行工作,每隔一个小时向服务器上自己的分支提交一次代码(很多人都习有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看前一个小时自己修改了哪些代码,就需要这样做了)。 10 11 3>.下班时间到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
六.搭建SVN服务器
1.部署环境
a>.操作系统是“Linux”版本;
b>.发行版是“CentOs6.6”;
c>.内核版本是“2.6.32-504.el6”;
d>.是“x86_64”的操作系统;
2.安装SVN
可能网上大家发现了有好多都是源码安装,其实我也蛮喜欢源码安装的,这才体现出一个做运维的特色,哈哈~不过我这里采用的是yum安装方式,别问我为什么啊,因为我懒,感兴趣的小伙伴可以去官网下载相应的tar包,解压到指定的目录即可。好了~废话不多说了~说干就干!
a>.更换国内阿里云源
1 [root@yinzhengjie ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2 [root@yinzhengjie ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
3 [root@yinzhengjie ~]# yum clean all
4 [root@yinzhengjie ~]# yum makecache
b>.编辑yum配置文件,让rpm包安装完毕后不自动清除(当你的源不好使的时候,我们可以将这些包手动rpm安装)
1 [root@yinzhengjie ~]# sed -i \'s/keepcache=0/keepcache=1/g\' /etc/yum.conf
2 [root@yinzhengjie ~]# grep keepcache /etc/yum.conf
3 keepcache=1
4 [root@yinzhengjie ~]#
c>.安装SVN
1 [root@yinzhengjie ~]# yum -y install subversion
2
3 [root@yinzhengjie ~]# yum -y install tree
4
5 [root@yinzhengjie ~]# rpm -qa | grep subversion
6 subversion-1.6.11-15.el6_7.x86_64
7 [root@yinzhengjie ~]#
8
9 [root@yinzhengjie ~]# rpm -qa | grep subversion
10 subversion-1.6.11-15.el6_7.x86_64
11 [root@yinzhengjie ~]#
12 [root@yinzhengjie ~]# find / -name subversion-1.6.11-15.el6_7.x86_64.rpm
13 /var/cache/yum/x86_64/6/base/packages/subversion-1.6.11-15.el6_7.x86_64.rpm
14 [root@yinzhengjie ~]#
15
16
17 [root@yinzhengjie ~]# tree /var/cache/yum/x86_64/6/base/packages/
18 /var/cache/yum/x86_64/6/base/packages/
19 ├── perl-URI-1.40-2.el6.noarch.rpm
20 ├── subversion-1.6.11-15.el6_7.x86_64.rpm
21 └── tree-1.5.3-3.el6.x86_64.rpm
22
23
24 0 directories, 3 files
25 [root@yinzhengjie ~]#
3.启动SVN
a>.创建SVN的根目录以及密码权限目录
1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/svndata
2 mkdir: created directory `/yinzhengjie/application\'
3 mkdir: created directory `/yinzhengjie/application/svndata\'
4 [root@yinzhengjie ~]#
5 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/svnpasswd
6 mkdir: created directory `/yinzhengjie/application/svnpasswd\'
7 [root@yinzhengjie ~]#
b>.启动SVN并指定项目的目录
1 [root@yinzhengjie ~]# svnserve --help 2 usage: svnserve [-d | -i | -t | -X] [options] 3 4 Valid options: 5 -d [--daemon] : daemon mode 6 -i [--inetd] : inetd mode 7 -t [--tunnel] : tunnel mode 8 -X [--listen-once] : listen-once mode (useful for debugging) 9 -r [--root] ARG : root of directory to serve 10 -R [--read-only] : force read only, overriding repository config file 11 --config-file ARG : read configuration from file ARG 12 --listen-port ARG : listen port 13 [mode: daemon, listen-once] 14 --listen-host ARG : listen hostname or IP address 15 [mode: daemon, listen-once] 16 -T [--threads] : use threads instead of fork [mode: daemon] 17 --foreground : run in foreground (useful for debugging) 18 [mode: daemon] 19 --log-file ARG : svnserve log file 20 --pid-file ARG : write server process ID to file ARG 21 [mode: daemon, listen-once] 22 --tunnel-user ARG : tunnel username (default is current uid\'s name) 23 [mode: tunnel] 24 -h [--help] : display this help 25 --version : show program version information 26 27 [root@yinzhengjie ~]# svnserve -d -r /yinzhengjie/application/svndata/ --pid-file=/yinzhengjie/application/svndata/svn.pid 28 [root@yinzhengjie ~]# 29 [root@yinzhengjie ~]# ps -ef | grep svn | grep -v grep 30 root 2987 1 0 06:47 ? 00:00:00 svnserve -d -r /yinzhengjie/application/svndata/ --pid-file=/yinzhengjie/application/svndata/svn.pid 31 [root@yinzhengjie ~]# 32 [root@yinzhengjie ~]# netstat -untalp | grep 3690 33 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2987/svnserve 34 [root@yinzhengjie ~]# 35 [root@yinzhengjie ~]# lsof -i :3690 36 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 37 svnserve 2987 root 3u IPv4 49123 0t0 TCP *:svn (LISTEN) 38 39 [root@yinzhengjie ~]# 40 [root@yinzhengjie ~]# more /yinzhengjie/application/svndata/svn.pid 41 2987 42 [root@yinzhengjie ~]#
4.配置SVN
a>.建立版本库
1 [root@yinzhengjie ~]# svnadmin create /yinzhengjie/application/svndata/jky 2 [root@yinzhengjie ~]# 3 [root@yinzhengjie ~]# ls -l /yinzhengjie/application/svndata/jky 4 total 24 5 drwxr-xr-x 2 root root 4096 Sep 25 07:00 conf 6 drwxr-sr-x 6 root root 4096 Sep 25 07:00 db 7 -r--r--r-- 1 root root 2 Sep 25 07:00 format 8 drwxr-xr-x 2 root root 4096 Sep 25 07:00 hooks 9 drwxr-xr-x 2 root root 4096 Sep 25 07:00 locks 10 -rw-r--r-- 1 root root 229 Sep 25 07:00 README.txt 11 [root@yinzhengjie ~]#
b>.备份svnserver.conf配置文件
1 [root@yinzhengjie ~]# cd /yinzhengjie/application/svndata/jky/conf/ 2 [root@yinzhengjie conf]# ll 3 total 12 4 -rw-r--r-- 1 root root 1080 Sep 25 07:00 authz 5 -rw-r--r-- 1 root root 309 Sep 25 07:00 passwd 6 -rw-r--r-- 1 root root 2279 Sep 25 07:00 svnserve.conf 7 [root@yinzhengjie conf]# 8 [root@yinzhengjie conf]# cp svnserve.conf svnserve.conf`date +%F` 9 [root@yinzhengjie conf]# 10 [root@yinzhengjie conf]# ll 11 total 16 12 -rw-r--r-- 1 root root 1080 Sep 25 07:00 authz 13 -rw-r--r-- 1 root root 309 Sep 25 07:00 passwd 14 -rw-r--r-- 1 root root 2279 Sep 25 07:00 svnserve.conf 15 -rw-r--r-- 1 root root 2279 Sep 25 07:07 svnserve.conf2017-09-25 16 [root@yinzhengjie conf]#
c>.编辑svnserver.conf配置文件
修改之前的配置如下:
修改之后的配置如下:
1 [root@yinzhengjie conf]# egrep "\\-access|\\-db =" svnserve.conf
2 anon-access = none
3 auth-access = write
4 password-db = /yinzhengjie/application/svnpasswd/passwd
5 authz-db = /yinzhengjie/application/svnpasswd/authz
6 [root@yinzhengjie conf]#
7 [root@yinzhengjie conf]#
8 [root@yinzhengjie conf]# diff svnserve.conf2017-09-25 svnserve.conf
9 12,13c12,13
10 < # anon-access = read
11 < # auth-access = write
12 ---
13 > anon-access = none
14 > auth-access = write
15 20c20
16 < # password-db = passwd
17 ---
18 > password-db = /yinzhengjie/application/svnpasswd/passwd
19 27c27
20 < # authz-db = authz
21 ---
22 > authz-db = /yinzhengjie/application/svnpasswd/authz
23 [root@yinzhengjie conf]#
d>.拷贝文件到制定目录并修改权限
1 [root@yinzhengjie conf]# cp authz passwd /yinzhengjie/application/svnpasswd/
2 [root@yinzhengjie conf]#
3 [root@yinzhengjie conf]# cd /yinzhengjie/application/svnpasswd/
4 [root@yinzhengjie svnpasswd]#
5 [root@yinzhengjie svnpasswd]# ll
6 total 8
7 -rw-r--r-- 1 root root 1080 Sep 25 07:28 authz
8 -rw-r--r-- 1 root root 309 Sep 25 07:28 passwd
9 [root@yinzhengjie svnpasswd]#
10 [root@yinzhengjie svnpasswd]# chmod 700 *
11 [root@yinzhengjie svnpasswd]#
12 [root@yinzhengjie svnpasswd]# ll
13 total 8
14 -rwx------ 1 root root 1080 Sep 25 07:28 authz
15 -rwx------ 1 root root 309 Sep 25 07:28 passwd
16 [root@yinzhengjie svnpasswd]#
e>.修改配置文件
修改passwd文件:
修改authz文件:
七.客户端连接
1.自行下载svn客户端,然后再客户端checkout服务器所创建的分支即可
2.输入账号密码(这个账号密码就是你在服务器上所配置的哟,我这里输入的就是yinzhengjie,密码是123),然后可以提交一个文件(SVN Commit),提交成功会弹出以下弹窗
3.以上操作说明你是第一次地提交,你可以在当前目录右击鼠标,点击“TortoiseSVN”,再点击“Repo-browser”,就可以看见刚刚在服务器提交的文件了
到这为止,SVN的服务器就算部署完成了,现在也是23:40了,我也该洗洗睡了,晚安喽~
以上是关于快速搭建企业subversion的主要内容,如果未能解决你的问题,请参考以下文章