在团队开发的过程中,通常有如下需求:协同修改、数据备份、版本管理、权限控制、历史记录等,因此有了版本控制的思想。
版本控制
指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
版本控制工具
对版本控制思想的具体实现,版本控制工具可以分为集中式、分布式两种。
由于将入职的公司使用 SVN 较多,所以在这具体地学习一下。
SVN
SVN 全称 Subversion,采用 C/S 结构设计,常用的操作如下:
为了学习演示客户端的操作,先在云服务器上搭建自己的 SVN 版本库。
yum install -y subversion
svn --version
mkdir /usr/local/svn/repository -p // 创建版本库目录
cd /usr/local/svn/repository
mkdir mypro //在版本库目录下创建具体项目目录
svnadmin create mypro/ //真正创建 SVN 版本库
创建完项目的版本库后,版本库中有以下默认内容:
vim /etc/sysconfig/svnserve //修改 SVN 默认根目录
systemctl enable svnserve.service //设置开机启动
systemctl start svnserve.service //启动 SVN 服务
ps aux | grep svn //检查是否启动成功
注: SVN 默认使用 3690 端口,云服务器需要开放相应端口。
命令行的操作,可以创建两个工作区来模拟两个开发人员:
开发人员检出项目
svn checkout svn://ip.ip.ip.ip/mypro ./ //检出版本库中所有内容
harry、sally 分别执行以上命令,目录下会自动创建 .svn 目录:
修改版本库的url:
svn sw --relocate svn://old_ip/目录 svn://new_ip/目录
SVN 要求提交一个新建的文件前需要先把它添加到版本控制体系(区别于版本库)中:
svn add xxx
在 harry 下创建 hello.txt 文件,并添加到版本控制体系中:
提交之前,需要设置版本库的权限,在 …/mypro/conf 下的 svnserve.conf 文件中进行配置,下图开启匿名的写权限:
之后可以提交 harry 创建的文件,由下图可知上传成功,且当前版本为1:
svn commit xxx -m “描述”
在服务端就可以看到我们提交的文件:
svn list svn://ip.ip.ip.ip/mypro
前面 harry 用户提交了文件,对服务端的版本库产生了修改,而 sally 用户检出的版本还是上一个版本,这时 sally 用户就可以进行更新的操作:
svn update [文件名] // []表示可选
过时文件:开发人员本地的版本相对服务器端版本来说是旧的版本,在旧的版本上进行了修改。
产生冲突的条件:
制造冲突:
在命令行我们可以制造冲突。
这时我们先提交 sally 修改后的 hello.txt:
此时,harry 本地的版本是落后于服务端的,harry 在提交时就会提醒本地文件已经过时:
然后我们执行更新操作,这时候就产生了冲突,我们先选择 p 推迟:
冲突表现
手动解决
半自动解决