SVN的全称是subversion,是一个开放源代码的版本控制系统。
本博文讲解如何在CentOS7下安装svn、配置多个项目版本库以及如何通过命令和TortoiseSVN来使用svn。
1. 安装svn服务
# yum install -y subversion
验证版本
# svn --version
2.创建版本库
subversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置,这里暂时不改默认目录。
分别创建pro1和pro2两个项目的SVN版本库
# svnadmin create /var/svn/pro1
# svnadmin create /var/svn/pro2
分别查看项目目录内容
# ls /var/svn/pro1
# ls /var/svn/pro2
看到如下三个文件
passwd:记录用户和对应密码
authz:配置用户或用户组对应的各文件夹权限的
svnserve.conf:针对本工程用到的passwd、authz的配置文件
3.设置svn开机自启动
# systemctl enable svnserve.service
4.设置防火墙和SELINUX
允许访问3690端口
# firewall-cmd --zone=public --add-port=3690/tcp --permanent
# firewall-cmd --reload
关闭SELINUX
# nano /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
重启生效
# reboot
5.配置SVN
将任一个工程的conf目录复制到SVN数据根目录
# cp -r /var/svn/pro1/conf /var/svn
分别清空项目版本库conf目录内容
# rm -f /var/svn/pro1/conf/*
# rm -f /var/svn/pro2/conf/*
进入/var/svn/conf目录
# cd /var/svn/conf
配置passwd
# nano passwd
添加用户名及密码,格式: 用户名 = 密码
[users]
# harry = harryssecret
# sally = sallyssecret
user1 = user1
user2 = user2
user3 = user3
user4 = user4
user5 = user5
user6 = user6
配置authz
# nano authz
配置用户及相关权限 ,user1、user2属于project1组,user3、user4属于project2组,user5、user6属于guest组,
project1组拥有pro1的rw(读写)权限,project2组拥有pro2的rw(读写)权限,guest组对pro1和pro2只有读的权限。
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
project1 = user1,user2
project2 = user3,user4
guest = user5,user6
[pro1:/]
@project1 = rw
@guest = r
[pro2:/]
@project2 = rw
@guest = r
配置svnserve.conf
# nano svnserve.conf
配置匿名权限(annon-access)设置为none,即没有任何权限;
授权权限设置为write拥有写权限;
指定密码文件位置和授权文件位置;
realm为权限授权域所有的版本库使用相同的realm值,这样,对版本库的密码缓存可以在多个版本库之间共享。
anon-access = none
auth-access = write
password-db = /var/svn/conf/passwd
authz-db = /var/svn/conf/authz
realm = /var/svn
注意:找到对应的行,去掉行首的#,行首不能留有空格,修改对应值。
分发svnserve.conf到各个项目的conf目录
# cp /var/svn/conf/svnserve.conf /var/svn/pro1/conf
# cp /var/svn/conf/svnserve.conf /var/svn/pro2/conf
删除/var/svn/conf目录下的svnserve.conf
# rm -f /var/svn/conf/svnserve.conf
6.启动svn
# systemctl start svnserve
7.客户端访问svn
7.1 命令行访问
创建并进入测试目录
# mkdir -p /root/test/test1
# cd /root/test/test1
checkout 项目pro1到当前目录
# svn checkout svn://192.168.134.131/pro1 ./
注意:ip地址注意修改成自己服务器ip
查看目录下生成了.svn目录
# ll -a pro1
total 20
drwxr-xr-x 3 root root 34 Mar 6 18:49 .
drwxr-xr-x 4 root root 32 Mar 6 18:46 ..
drwxr-xr-x 4 root root 75 Mar 6 18:49 .svn
新建一个文件
# cd pro1
# nano hello.txt
内容为
hello world
添加文件到svn
# svn add hello.txt
A hello.txt
提交文件到svn
# svn commit -m "first commit" hello.txt
查看svn
# svn list svn://192.168.134.131/pro1
按提示输入用户名及密码
hello.txt
如果有其他项目成员更新了svn文件,只需要执行update命令即可
# svn update
7.2 TortoiseSVN
Windows下安装好TortoiseSVN
在任意目录下,新建一个test文件夹,进入test文件夹,在空白处右键-->SVN Checkout
输入svn地址
点击OK-->OK,看到如下页面
修改hello.txt的内容,保存后,可看到hello.txt图标添加了红色感叹号,说明文件已经变化,通过右键空白处-->SVN Commit来提交文件到svn服务器
8.冲突及解决冲突
团队协作不可避免的产生冲突,冲突产生的原因是在同一时间多个用户对同一文件的相同位置进行修改。
8.1产生冲突
例如:user1 和 user2 同时对hello.txt同一位置进行修改,user2先提交,可以提交成功,文件版本号+1,当user1后来提交时将报错:文件已过时(out of date),因为user1的版本号小于服务器最小版本号
8.2解决冲突
user先update更新到最新版本,右键 空白处-->SVN update
多出如下三个文件
hello.txt.mine:自己的内容
111
222user1upd
333
444
555
666
hello.txt.r4:原来svn服务器内容
111
222
333
444
555
666
hello.txt.r5最近服务器内容
111
222user2upd
333
444
555
666
hello.txt内容
111
<<<<<<< .mine
222user1upd
||||||| .r4
222
=======
222user2upd
>>>>>>> .r5
333
444
555
666
修改hello.txt 解决冲突,解决冲突需要人工判断是保留哪些内容,例如user1和user2的修改都保留,修改后内容如下:
111
222user1upd
222user2upd
333
444
555
666
保存 !
删除产生的三个文件
hello.txt.mine、hello.txt.r4、hello.txt.r5
user1再次svn commit提交hello.txt到svn服务器,提交成功,版本号+1
完成! enjoy it!