教程说明

  • 本系列教程目录大纲:​​《SVN系列教程-目录大纲》​​

《SVN系列教程-第一章-SVN安装与介绍》

1.1 项目协同开发

我们在公司中,由于项目的庞大,通常都是由多人协作进行开发。多人协作开发会存在很多的问题,例如代码共享、代码合并、历史回退、权限控制、日志记录等问题。

  • 代码共享:建立一个专门的服务器管理代码;
  • 代码合并:复制粘贴,肉眼观察,极易出错;
  • 历史回退:在修改代码之前,都做好每次修改前的备份(复制粘贴)
  • 权限控制:人为控制,非常麻烦;
  • 日志记录:人为控制,非常麻烦;

为了解决上述问题,我们急需一款软件能够帮助我们进行项目的协同开发;

1.1.1 什么是版本控制

  • 版本控制系统(Version Control System):

你可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。

《SVN系列教程-第一章-SVN安装与介绍》_svn安装

版本控制系统会记录所有对项目文件的更改。这就是版本控制;

1.1.2 版本控制的好处

试想一下,如果没有版本控制系统,当你需要处理那些共享文件夹中的文件时,你必须告知办公室里的所有人,你正在对哪些文件进行编辑;与此同时,其他人必须要避免与操作相同的文件。这是一个不现实和完全错误的流程。当你花了很长时间完成你的编辑后,可能这些文件早已经被团队里的其他开发成员修改或者删除了。

如果使用了版本控制系统,每一个团队成员都可以在任何时间对任何文件毫无顾虑的进行修改,版本控制系统可以把之后所有的改动合并成一个共同的版本,不论是一个文件还是整个项目。这个共同的中心平台就是我们的版本控制系统。

1.2 SVN简介

Subversion简称SVN,是apache旗下的一款版本控制工具;它将文件存放在中心版本库里, 这个版本库很像一个普通的文件服务器, 不同的是, 它可以记录每一次文件和目录的修改情况, 这样就可以借此将数据恢复到以前的版本, 并可以查看数据的更改细节。另外SVN还提供版本冲突解决、权限控制、集中式的代码管理、日志记录等功能;

SVN全称:Subversion;是Apache公司研发的一款开放源代码的版本控制系统,它将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。除此之外,SVN还提供了优雅的代码冲突解决、权限控制、修改日志记录等;

《SVN系列教程-第一章-SVN安装与介绍》_visualsvn_02

Subversion官方网站:​​https://subversion.apache.org/​

1.3 SVN的安装

SVN也是一个C/S架构的软件,我们首先需要安装SVN服务端;

1)双击SVN服务端安装程序:

《SVN系列教程-第一章-SVN安装与介绍》_svn安装_03

2)接受协议:

《SVN系列教程-第一章-SVN安装与介绍》_tortoisesvn_04

3)添加环境变量:

《SVN系列教程-第一章-SVN安装与介绍》_tortoisesvn_05

4)选择标准安装:

《SVN系列教程-第一章-SVN安装与介绍》_svn_06

5)选择SVN安装路径、仓库路径以及端口

《SVN系列教程-第一章-SVN安装与介绍》_visualsvn_07

6)开始安装:

《SVN系列教程-第一章-SVN安装与介绍》_svn_08

7)安装成功

《SVN系列教程-第一章-SVN安装与介绍》_版本控制_09

8)SVN服务端窗口:

《SVN系列教程-第一章-SVN安装与介绍》_版本控制_10

关于仓库、用户、组的知识点我们在后面详细介绍;

1.4 SVN操作介绍

1.4.1 SVN的操作流程

《SVN系列教程-第一章-SVN安装与介绍》_svn_11

  • ​checkout​​:从远程仓库(SVN)中拉取代码,初始化本地项目;此时本地项目和svn中的一模一样(最新版本的代码)。
  • ​update​​:从服务器获取最新的代码(最新的版本),我们每天来到公司的第一件事就是更新到最新代码,提交代码前也要先更新一下代码,防止使用旧版本提交;
  • ​commit​​:将代码提交到服务器,此时服务器的最新代码以我们电脑当前的代码为准,每次提交后,版本号都会累加;

1.4.2 代码提交产生的问题

多人在协同开发时,可能会出现如下问题:

1)旧版本冲突:

用户在提交代码时,必须要使用最新的版本进行提交,不能使用旧版本提交代码;

《SVN系列教程-第一章-SVN安装与介绍》_visualsvn_12

  • ①小灰更新代码到最新版本(10)
  • ②小蓝更新代码到最新版本(10)
  • ③小灰新增一行111
  • ④小蓝新增一行222
  • ⑤小灰提交代码到svn仓库,svn仓库中的文件版本为11,小灰本地文件的版本也变为11
  • ⑥小蓝提交代码到svn仓库,提交失败,使用了旧版本的数据进行提交

我们在提交代码前应该养成习惯,首先更新一下本地代码,即将本地代码的版本更新到最新,然后再提交;

2)代码编辑冲突:

我们前面说到过,我们在提交代码前应该更新(update)一下代码,确保本地文件的版本是最新版本,然后再提交;那万一在更新代码时,svn中的代码和我们当前本地的代码不一样呢?此时就会产生代码冲突问题:

《SVN系列教程-第一章-SVN安装与介绍》_svn_13

  • ①小灰更新代码到最新版本(10)
  • ②小蓝更新代码到最新版本(10)
  • ③小灰修改文件内容为aaa
  • ④小蓝修改同一个文件,将内容修改为bbb
  • ⑤小灰提交代码到svn仓库,svn仓库中的文件版本为11,小灰本地文件的版本也变为11
  • ⑥小蓝更新代码(确保本地文件是最新版本),此时代码冲突;因为本地文件中的内容和svn仓库中的文件内容不一致;

svn提供了代码冲突的解决办法,我们在后面介绍,本章了解代码冲突的情况即可;