介绍
Subversion(SVN)是一个开源的版本控制系统,也就是说Subversion管理着随时间改变的数据。
这些数据放置在一个中央资料档案库(repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样您就可以把档案恢复到旧版本,或浏览文件的变动历史。repository
(源代码库):源代码统一存放的地方
Checkout(提取):当您手上没有源代码时,您需要从库中检出一份源代码
提交(提交):如果您已经修改了代码,您需要提交到存储库
更新(更新):当您已经结账了一份源代码,更新一下,您就可以与储存库上的源代码同步,手上您的代码就会有最新的变更
日常开发过程其实就是这样的(假设您已经结帐并且已经工作了几天):更新(获得最新的代码) - >作出自己的修改并调试成功 - > Commit(大家就可以看到您的修改 了)。
如果您与同事同时修改了同一个文件,SVN可以合并你们的改动,实际上SVN管理源代码是以行为单位的,就是说你们只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict(冲突),需要手动确认。
系统环境:
[root @ ecs-4082〜]#cat / etc / redhat-release CentOS Linux版本7.3.1611(核心) [root @ ecs-4082〜]#ip add 1:lo:<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue状态UNKNOWN qlen 1 链接/回放00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 永久的永久preferred_lft valid_lft inet6 :: 1/128作用域主机 永久的永久preferred_lft valid_lft 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast状态UP qlen 1000 link / ether fa:16:3e:8f:9b:37 brd ff:ff:ff:ff:ff:ff inet 192.168.2.10/24 brd 192.168.2.255范围全局动态eth0 valid_lft 62622sec preferred_lft 62622sec inet6 fe80 :: f816:3eff:fe8f:9b37 / 64范围链接 永久的永久preferred_lft valid_lft
一,安装SVN服务器
[root @ ecs-4082〜]#yum install subversion -y
二,查看SVN版本
[root @ ecs-4082〜]#svnserve --version svnserve,版本1.7.14(r1542130) 2017年8月23日20:43:38编译 版权(C)2013 Apache软件基金会。 这个软件由许多人的贡献组成; 请参阅通知 文件以获取更多信息。 Subversion是开源软件,请参阅http://subversion.apache.org/ 以下存储库后端(FS)模块可用: * fs_base:用于使用Berkeley DB存储库的模块。 * fs_fs:用于处理纯文件(FSFS)存储库的模块。 赛勒斯SASL认证可用。
三,创建版本库
1,创建目录
[root @ ecs-4082〜]#mkdir / var / svn
2,切换到刚创建好的目录,创建版本库
[root @ ecs-4082〜]#cd / var / svn / [root @ ecs-4082 svn]#svnadmin create / var / svn / svnrepos
3,切换目录,查看自动生成的版本库文件
[root @ ecs-4082 svn]#cd svnrepos [root @ ecs-4082 svnrepos]#ll 共24个 drwxr-xr-x 2 root root 4096 Mar 11 14:12 conf drwxr-sr-x 6 root root 4096 Mar 11 14:12 db -r - r - r - 1 root root 2 Mar 11 14:12格式 drwxr-xr-x 2 root root 4096 Mar 11 14:12 hooks drwxr-xr-x 2 root root 4096 Mar 11 14:12锁定 -rw-r - r-- 1 root root 229 Mar 11 14:12 README.txt
Subversion目录说明:
db目录:所有版本控制的数据存放文件(文件存储位置)
。hooks目录:放置hook脚本文件的目录
。lock目录:用来追踪存取文件库的客户端。format
文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。conf
目录:是这个仓库的配置文件(仓库的用户访问账号,权限等)。
如图4所示,切换进入CONF目录(是SVN版本库配置文件),查看
[root @ ecs-4082 svnrepos]#cd conf / [root @ ecs-4082 conf]#ll 共12个 -rw-r - r-- 1 root root 1080 Mar 11 14:12 authz -rw-r - r-- 1 root root 309 Mar 11 14:12 passwd -rw-r - r-- 1 root root 3090 Mar 11 14:12 svnserve.conf
authz:是权限控制文件
。passwd:是账号密码文件
。svnserve.conf:SVN服务配置文件。
5,创建账号密码,这里创建两个测试用户
[root @ ecs-4082 conf]#vim passwd
按
Esc键退出编辑模式在[用户]中中添加用户账号和密码,格式:账号=密码,比如示例中的suzhan = redhat(注意等号两端要有一个空格)。
按Esc键退出编辑模式,并输入:wq保存并退出。
如图6所示,在AuthZ的文件,设置用户权限
[root @ ecs-4082 conf]#vim authz
按i键进入编辑模式。
在末尾添加如下代码(其中,r表示读,w表示写)
按Esc键退出编辑模式,并输入:wq保存并退出。
7,修改svnserver.conf文件
[root @ ecs-4082 conf]#vim svnserve.conf
按下I键进入编辑模式。
打开以下几个注释(注意每行不能以空格开始,等号两端要有一个空格):
anon-access = read#匿名用户可读,您也可以设置anon-access =没有,允许匿名用户访问。设置为无,可以使日志日期正常显示
auth-access = write#授权用户可写
password-db = passwd#使用哪个文件作为账号文件
authz-db = authz#使用哪个文件作为权限文件
realm = / var / svn / svnrepos#认证空间名,版本库所在目录
按Esc键退出编辑模式,并输入:wq保存并退出。
四,启动SVN版本库,查看进程存在就表示开启。需要终止可以使用kill -9 +进程号
[root @ ecs-4082 conf]#svnserve -d -r / var / svn / svnrepos / [root @ ecs-4082 conf]#ps -ef | grep svn 根50245 1 0 14:40?00:00:00 svnserve -d -r / var / svn / svnrepos / root 50257 47795 0 14:40 pts/0 00:00:00 grep --color=auto svn
也可以查看SVN服务的默认端口是TCP:3690是否启动
[root@ecs-4082 conf]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 50245/svnserve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1455/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1099/master
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 1102/java
tcp6 0 0 :::22 :::* LISTEN 1455/sshd
tcp6 0 0 :: 1:25 ::: * LISTEN 1099 / master
的Windows客户端测试连接
一,安装客户端
1,根据系统版本先到官网下载客户端和语言包:HTTPS:?//tortoisesvn.net/downloads.html SPM = a2c4g.11186623.2.10.Id9CJW
二,连接SVN服务器
1,在您的本地项目文件夹中(如示例中的C:\ svntest),右键空白处弹出菜单,选择SVN检出。
2,指定资源库URL,格式为svn://内网IP或者网IP /资源库名;指定检出至目录;再单击确定。
3,如图显示检出成功。
三,创建并提交文件的.svn客户端每次创建文件都会在本地保存一份副本在隐藏文件.svn文件里面,所以占用本地存储双倍存储空间
1,创建文件,可以查看到隐藏文件夹
2,在项目文件空白处单击右键,选择SVN提交
3,提交SVN服务器资源库,覆盖掉资源库项目从而实现更新。 (注意:如果发生提交冲突,即两人都提交修改,后提交者由于版本落后会提交失败这时可以先备份自己的项目,从服务端下载最新的项目后,再将自己的项目覆盖到。本地项目文件夹,最后SVN提交即可成功提交。)
四,获取更新,如果别人修改了SVN服务端资源库上的项目,您想下载最新的项目,则在本机项目文件空白处单击右键,选择SVN更新,即可自动完成下载,并会提示所作的更新有哪些。
五,恢复删除数据。
如图1所示,先删除原先数据并选择提交
2,在客户端工具,TortoiseSVN-显示日志
3,恢复到指定版本数据
4,这次演示的SVN服务器存储文件路径
[root @ ecs-4082 revs]#du -sh * 372M 0 [root @ ecs-4082 revs]#pwd 在/ var / SVN / svnrepos / DB /转速
六,删除SVN客户端数据和SVN服务器数据
如图1所示,先在客户端使用用户svnuser1上传60兆左右的测试压缩包
2,使用其他用户svnuser2登录能正常更新到刚提交的测试压缩包
3,使用用户svnuser1目录删除测试压缩包之后选择提交更新
如图4所示,使用用户svnuser2更新,也可以看到已经删除文件
5,但是在SVN服务器上查看,还存在记录(在版本2查看文件大小)
[root @ ecs-4082 0]#pwd 的/ var / SVN / svnrepos /分贝/转/ 0 [root @ ecs-4082 0]#du -sh * 4.0K 0 4.0K 1 69M 2 4.0K 3
6,删除SVN服务器文件,要同时删除:在/ var / SVN / svnrepos /分贝/转/ 0和/变种/ SVN / svnrepos /分贝/的revprops / 0这两个目录下的相同版本才可以
[root @ ecs-4082 0]#cd - 的/ var / SVN / svnrepos /分贝/的revprops / 0 [root @ ecs-4082 0]#cd - 的/ var / SVN / svnrepos /分贝/转/ 0
如图7所示,这里演示删除包含压缩包文件的版本2
[root @ ecs-4082 0]#cd - 的/ var / SVN / svnrepos /分贝/转/ 0 [root @ ecs-4082 0]#ll 总计70624 -r - r - r - 1 root root 115 Mar 11 21:51 0 -r - r - r - 1 root root 424 Mar 11 21:55 1 -r - r - r - 1 root root 72228771 Mar 11 21:58 2 -r - r - r - 1 root root 242 Mar 11 22:02 3 [root @ ecs-4082 0]#rm -rf 2 [root @ ecs-4082 0]#ll 共12个 -r - r - r - 1 root root 115 Mar 11 21:51 0 -r - r - r - 1 root root 424 Mar 11 21:55 1 -r - r - r - 1 root root 242 Mar 11 22:02 3 [root @ ecs-4082 0]#cd - 的/ var / SVN / svnrepos /分贝/的revprops / 0 [root @ ecs-4082 0]#ll 共16个 -r - r - r - 1 root root 50 Mar 11 21:51 0 -r - r - r - 1 root root 96 Mar 11 21:55 1 -r - r - r - 1 root root 96 Mar 11 21:58 2 -r - r - r - 1 root root 96 Mar 11 22:02 3 [root @ ecs-4082 0]#rm -rf 2 [root @ ecs-4082 0]#ll 共12个 -r - r - r - 1 root root 50 Mar 11 21:51 0 -r - r - r - 1 root root 96 Mar 11 21:55 1 -r - r - r - 1 root root 96 Mar 11 22:02 3
8,查看日志信息已经显示删除,不可逆恢复操作
9,