场景介绍:最近朋友公司想搭建一套版本控制软件,让我推荐下,我跟他说SVN或者GIT都可以,最后他选择使用SVN作为版本控制,我简单的跟他写了个文档跟他介绍下:
一、SVN是什么?
1、subversion
2、SVN是一个版本管理工具
3、所有数据都集中在档案库里,类似于FTP工具
4、管理任意一个元素(文件),任何时刻的变化,ftp只是一个上传下载的工具(SVN会备份并记录每个文件每一次的修改更新变动)
常用的版本管理工具:vss,cvs,svn,git
二、svn与git的简单区别:
1、svn是一个集中式的版本管理,git是一个分布式版本控制
2、svn要做版本管理的话,必须要提交到服务器上,而git,就算服务器断开的话,还可以在本地做版本控制
3、GIT把内容按元数据方式存储,而SVN是按文件
4、GIT没有一个全局的版本号,而SVN有
5、GIT的内容完整性要优于SVN
参考资料:http://www.oschina.net/news/12542/git-and-svn
三、运维人员应该掌握哪些版本管理:
对于版本管理系统,运维人员需要掌握的技术点:
1、安装、部署、维护、排障
2、简单实用,很多公司都是开发来管理,包括建立新仓库和添加删除账号
3、对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务
四、SVN服务运行模式与访问模式
1、独立服务器访问
访问地址如:svn://svn.test.com/os
2、借助apache等http服务
访问地址如:http://svn.test.com/os
a)单独安装apache+svn(不要用)
b)CSVN(apache+svn)是一个单独的整合的软件,带web界面管理的SVN软件
3、本地直接访问
file:///application/svndata/os
推荐svn以及csvn web管理方式
五、SVN 的工作原理:
采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本, 所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。
SVN 支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最新改变更新到服务器端, 而且后面的更新不会覆盖前面的更新,而是作为一个新的版本被保存下来——SVN甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。
六、SVN基本操作:
1、检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。
2、更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时或修改公共文件之前执行一次。
3、提交(commit):将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。
七、SVN的安装与配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
[root@LVS-DR01 ~] # yum -y install subversion
[root@LVS-DR01 ~] # rpm -qa subversion
subversion-1.7.14-10.el7.x86_64 [root@LVS-DR01 ~] # svnserve --version
svnserve, version 1.7.14 (r1542130) compiled Nov 20 2015, 19:25:09
Copyright (C) 2013 The Apache Software Foundation. This software consists of contributions made by many people; see the NOTICE file for more information.
Subversion is open source software, see http: //subversion .apache.org/
The following repository back-end (FS) modules are available: * fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available. 创建svn数据目录,默认的svn目录是 /var/svn ,需要我们手动创建:
[root@LVS-DR01 ~] # mkdir -p /var/svn
使用svnadmin初始化仓库: [root@LVS-DR01 ~] # svnadmin create /var/svn
[root@LVS-DR01 ~] # tree /var/svn
/var/svn ├── conf │?? ├── authz │?? ├── passwd
│?? └── svnserve.conf ├── db │?? ├── current │?? ├── format
│?? ├── fsfs.conf │?? ├── fs- type
│?? ├── min-unpacked-rev │?? ├── revprops │?? │?? └── 0 │?? │?? └── 0 │?? ├── revs │?? │?? └── 0 │?? │?? └── 0 │?? ├── transactions │?? ├── txn-current │?? ├── txn-current-lock │?? ├── txn-protorevs │?? ├── uuid │?? └── write-lock ├── format
├── hooks │?? ├── post-commit.tmpl │?? ├── post-lock.tmpl │?? ├── post-revprop-change.tmpl │?? ├── post-unlock.tmpl │?? ├── pre-commit.tmpl │?? ├── pre-lock.tmpl │?? ├── pre-revprop-change.tmpl │?? ├── pre-unlock.tmpl │?? └── start-commit.tmpl ├── locks │?? ├── db.lock │?? └── db-logs.lock └── README.txt 10 directories, 27 files [root@LVS-DR01 ~] # cd /var/svn/conf/
[root@LVS-DR01 conf] # ll
total 12 -rw-r--r-- 1 root root 1080 Jun 14 14:59 authz -rw-r--r-- 1 root root 309 Jun 14 14:59 passwd
-rw-r--r-- 1 root root 3090 Jun 14 14:59 svnserve.conf [root@LVS-DR01 conf] # cp svnserve.conf svnserve.conf.bak
|
八、开启SVN服务:
1
2
3
4
5
6
7
8
9
10
11
|
[root@LVS-DR01 ~] # systemctl start svnserve.service
[root@LVS-DR01 ~] # systemctl status svnserve.service
[root@LVS-DR01 ~] # systemctl enable svnserve.service
Created symlink from /etc/systemd/system/multi-user .target.wants /svnserve .service
to /usr/lib/systemd/system/svnserve .service.
SVN默认开启3690端口,检查下: [root@LVS-DR01 ~] # lsof -i :3690
COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME
svnserve 60317 root 3u IPv4 286761 0t0 TCP *:svn (LISTEN) [root@LVS-DR01 ~] # netstat -antp | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 60317 /svnserve
|
九、修改SVN默认位置
1
2
3
4
5
6
7
8
9
10
|
在CentOS7下使用yum直接安装SVN,修改SVN默认项目的位置 [root@LVS-DR01 svn] # mkdir -p /dawnpro/svn
[root@LVS-DR01 conf] # vim /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve. # # Specify the repository location in -r parameter: OPTIONS= "-r /dawnpro/svn"
#OPTIONS="-r /var/svn" 说明:将 /var/svn 目录调整为 /dawnpro/svn
[root@LVS-DR01 conf] # systemctl restart svnserve
|
十、创建svn版本库目录
1
2
3
4
5
6
7
8
9
10
|
[root@LVS-DR01 svn] # cd /dawnpro/svn/
[root@LVS-DR01 svn] # mkdir -p EIP EMS SAP
[root@LVS-DR01 svn] # svnadmin create EIP
[root@LVS-DR01 svn] # svnadmin create EMS
[root@LVS-DR01 svn] # svnadmin create SAP
[root@LVS-DR01 svn] # ll
total 0 drwxr-xr-x 6 root root 86 Jun 16 21:56 EIP drwxr-xr-x 6 root root 86 Jun 16 21:56 EMS drwxr-xr-x 6 root root 86 Jun 16 21:57 SAP |
十一、新建个目录统一管理用户权限
1
2
3
4
5
|
[root@LVS-DR01 ~] # mkdir -p /dawnpro/svn/conf/
[root@LVS-DR01 ~] # cp /dawnpro/svn/EIP/conf/* /dawnpro/svn/conf/
[root@LVS-DR01 ~] # cd /dawnpro/svn/conf/
[root@LVS-DR01 conf] # ls
authz passwd
|
十二、修改权限管理文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
[root@LVS-DR01 conf] # egrep -v "^#|^$" authz
[ groups ]
EIP = EIP01,EIP02 EMS = EMS02,EMS02 SAP = SAP01,SAP02 [/] * = [EIP:/] @EIP = rw * = [EMS:/] @EMS = rw * = [SAP:/] @SAP = rw * = 说明: a) * = 以上没有定义的用户都没有任何权限 b) @EIP = rw代表EIP组具有rw权限 [root@LVS-DR01 conf] # egrep -v "^#|^$" passwd
[ users ]
admin = admin EMS01 = EMS01 EMS02 = EMS02 EIP01 = EIP01 EIP02 = EIP02 SAP01 = SAP01 SAP02 = SAP02 [root@LVS-DR01 ~] # egrep -v "^#|^$" /dawnpro/svn/EIP/conf/svnserve.conf
[general] anon-access = none auth-access = write password-db = /dawnpro/svn/conf/passwd
authz-db = /dawnpro/svn/conf/authz
realm = EIP [root@LVS-DR01 ~] # egrep -v "^#|^$" /dawnpro/svn/EMS/conf/svnserve.conf
[general] anon-access = none auth-access = write password-db = /dawnpro/svn/conf/passwd
authz-db = /dawnpro/svn/conf/authz
realm = EMS [root@LVS-DR01 ~] # egrep -v "^#|^$" /dawnpro/svn/SAP/conf/svnserve.conf
[general] anon-access = none auth-access = write password-db = /dawnpro/svn/conf/passwd
authz-db = /dawnpro/svn/conf/authz
realm = SAP |
十三、测试下权限配置的结果
a)使用SVN客户端访问SVN服务器
b)使用EIP01账号访问svn://10.10.10.101/EIP
c)测试上传"04-git诞生记.png",上传成功(过程太短,我就没截图)
d)换个账号进行测试(使用EMS01账号进行测试)
e)提示没有权限(测试成功)
说明,SVN服务修改完配置文件,不需要重启SVN服务就可以直接生效。