一、SVN的概述;
概述:subversion(简称svn)是近几年崛起的版本管理软件,SVN=版本控制+备份服务器,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件。SVN自由,开源的版本控制系统,核心数据仓库---Repository,工作空间---Workspace;
优势:
协作开发 ;
版本回退 ;
查看项目代码修改历史(领导可以掌控项目的开发进度);
二、SVN的工作流程;
访问方式:
1.独立服务器访问:svn://svn.test.com/test
2.借助Apache等http服务:http://svn.test.com/test
交互流程:
三、案例:搭建SVN版本控制器结合ssh实现访问权限控制;
案例环境:
系统类型 | IP地址 | 主机名 | 所需软件 |
Centos 7.4 1708 64bit | 192.168.100.101 | svn.linuxfan.cn | subversion |
Centos 7.4 1708 64bit | 192.168.100.102 | client.linuxfan.cn |
|
Win7-1 | 192.168.100.200 | client | tortoise |
SVN账户:
用户名 | 组 | 权限 |
zs | linuxfan | rwx |
ls | ||
ww |
| r-x |
案例步骤:
- 安装SVN程序并准备存储仓库;
- 配置SVN账户并给予权限;
- svn服务端阶段上传测试数据;
- linux客户端操作使用svn程序;
- windows客户端安装客户端程序;
- windows客户端使用ww用户在svn程序检出数据;
- windows客户端节点使用ww用户删除svn库中数据;
- windows客户端使用zs用户检出数据并且删除数据;
- windows客户端使用zs用户上传项目开发代码;
- windows客户端使用zs用户回滚提交的数据;
- windows客户端使用zs用户比较不同代码的异同点;
- windows客户端使用zs用户导出项目的开发代码;
- 安装SVN程序并准备存储仓库;
[root@svn ~]# yum -y install subversion 下载svn
[root@svn ~]# tail -1 /etc/sysconfig/svnserve
OPTIONS="-r /var/svn"
[root@svn ~]# mkdir -p /var/svn/project 创建仓库
[root@svn ~]# svnadmin create /var/svn/project/ 创建项目
[root@svn ~]# ls /var/svn/project/
conf db format hooks locks README.txt
[root@svn ~]# systemctl start svnserve
[root@svn ~]# systemctl enable svnserve
Created symlink from /etc/systemd/system/multi-user.target.wants/svnserve.service to /usr/lib/systemd/system/svnserve.service.
[root@svn ~]# netstat -utpln |grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1136/svnserve
- 配置SVN账户并给予权限;
[root@svn ~]# useradd zs 创建3个用户
[root@svn ~]# useradd ls
[root@svn ~]# useradd ww
[root@svn ~]# echo 123123 |passwd --stdin zs
更改用户 zs 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@svn ~]# echo 123123 |passwd --stdin ls
更改用户 ls 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@svn ~]# echo 123123 |passwd --stdin ww
更改用户 ww 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@svn ~]# groupadd linuxfan 创建组
[root@svn ~]# gpasswd -M zs,ls linuxfan 将再zs,ls,放在linuxfan组中
[root@svn ~]# getfacl /var/svn/project/ 获取文件访问控制列表
getfacl: Removing leading '/' from absolute path names
# file: var/svn/project/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@svn ~]# setfacl -R -m g:linuxfan:rwx /var/svn/project/ 设置linuxfan组对/var/svn/project这个文件有最高权限
[root@svn ~]# setfacl -R -m u:ww:rx /var/svn/project/ ##最少需要拥有rx权限,否则将无法检出
[root@svn ~]# chown root:root /var/svn/project/
[root@svn ~]# chmod 770 /var/svn/project/
[root@svn ~]# getfacl /var/svn/project/
getfacl: Removing leading '/' from absolute path names
# file: var/svn/project/
# owner: root
# group: root
user::rwx
user:ww:r-x
group::r-x
group:linuxfan:rwx
mask::rwx
other::---
- svn服务端阶段上传测试数据;
[root@svn ~]# svn mkdir file:///var/svn/project/trunk1 -m 'create' ##-m选项后参数随意
提交后的版本为 1。
[root@svn ~]# svn mkdir file:///var/svn/project/trunk2 -m 'create'
提交后的版本为 2。
[root@svn ~]# svn mkdir file:///var/svn/project/trunk3 -m 'create'
提交后的版本为 3。
[root@svn ~]# svn import /etc/init.d/ file:///var/svn/project/trunk4/ -m 'import'
正在增加 ...
...
提交后的版本为 4。
[root@svn ~]# svn list file:///var/svn/project/
trunk1/
trunk2/
trunk3/
trunk4/
[root@svn ~]# svn list file:///var/svn/project/trunk4
...所有子目录及文件
[root@svn ~]# svn checkout file:///var/svn/project/trunk4 /tmp/ ##检出svn中的文件
[root@svn ~]# ls /tmp/
authconfig ebtables-config iptables-config modules readonly-root selinux
cbq firewalld irqbalance netconsole rsyncd sshd
console grub kdump network rsyslog svnserve
cpupower init kernel network-scripts run-parts wpa_supplicant
crond ip6tables-config man-db rdisc saslauthd
[root@svn ~]# svn delete file:///var/svn/project/trunk4/ ##删除svn版本库中文件
- linux客户端操作使用svn程序;
[root@client ~]# yum -y install subversion
[root@client ~]# svn list svn+ssh://zs@192.168.100.101/var/svn/project/
zs@192.168.100.101's password:
trunk1/
trunk2/
trunk3/
trunk4/
[root@client ~]# svn list svn+ssh://zs@192.168.100.101/var/svn/project/trunk4/
zs@192.168.100.101's password:
authconfig
cbq/
console/
cpupower
crond
...
- windows客户端安装客户端程序;
- windows客户端使用ww用户在svn程序检出数据;