版本控制工具(一)——SVN的具体使用

为什么要使用版本控制工具

先来说说为甚么要使用版本控制工具吧。

版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。

使用版本控制工具大概有以下几方面的好处:

  1. 协同合作

当你的工作团队中没有使用版本控制工具的时候,对于共享文件的操作会存在很大的麻烦,如果你要处理某些共享文件时你要大声的告诉所有人。因为在这个时候有人可能正在修改这个文件,或者有人正在删除这个文件,这就会导致难以解决的问题。有了版本控制工具,团队中的每个人都可以放心的操作每一个文件,而不必担心自己的操作影响到他人的使用。

  1. 正确的存储版本

假如你的团队正在开发一个项目,每开发一个新的功能,你都需要对其进行保存,使用版本控制工具可以很方便的帮助你做到这一点,它会自动的帮你加上版本号,它还可以告诉你每一个版本之间的改动在哪里,以及这些改动的详细信息。

  1. 回滚到之前的版本

如果有需要的话,你可以回滚到之前的版本,然后重新开发。这可能意味着你发现了一些严重的问题。不过通常情况下,对于一些小的问题,撤销就可以解决。

  1. 备份

版本控制工具会在每一个团队人员本地保存一份完整的项目副本,如果出现了不幸的事情导致你的团队丢失了服务器或者存储硬盘上的项目,使用项目副本就可以恢复。

  1. 了解发生了什么

对于每一次的改动,版本控制工具都会要求添加一些备注信息,通过这些备注信息,你可以快速的了解到每一次版本更新都改动了什么内容。

及时的保存新的改动是一个良好的编程习惯,下面介绍SVN版本控制工具的基本使用。关于SVN的基本使用我们分为以下几个部分来进行说明:

  1. 安装
  2. 服务器操作-新建仓库
  3. 服务器操作-新建用户
  4. 服务器操作-新建团队
  5. 客户端操作-场景模拟

SVN

pache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

SVN采用了分支管理系统,互联网上免费的版本控制服务多基于Subversion。

安装

如果你想在本地使用SVN的话,首先要学会搭建SVN的服务器。幸运的是这部分内容并不难,已经有前辈帮我们总结好了:传送门

你要安装的东西有两个,一个是SVN服务器,一个是SVN客户端。有需要的话,你也可以安装语言包。

这是官网的下载地址:传送门2

新建仓库

下载好服务器和客户端后,我们现在来模拟一下真实的开发场景。
首先你需要在服务器上新建一个仓库。
版本控制工具(一)——SVN的具体使用
点击下一步:
版本控制工具(一)——SVN的具体使用
给你的仓库起一个名字,然后点击下一步:
版本控制工具(一)——SVN的具体使用
选择单个项目仓库,点击下一步
版本控制工具(一)——SVN的具体使用
这里要求你设置仓库权限,默认(所有人都可以读/写)即可。点击create。
版本控制工具(一)——SVN的具体使用
最后它会让我们回顾一下刚才的选择:
版本控制工具(一)——SVN的具体使用
没有问题,点击finish。

这样,在我们的Repostitory下就有了CodeA这么一个仓库:
版本控制工具(一)——SVN的具体使用

新建用户

下面我们新建几个用户在本地自己玩:
版本控制工具(一)——SVN的具体使用
它会提示你输入用户名和密码,以及确认密码。这里自己随意,比如我叫:
版本控制工具(一)——SVN的具体使用
点击ok,就创建好了一个用户:
版本控制工具(一)——SVN的具体使用
同样的操作,我们另建一个用户:
版本控制工具(一)——SVN的具体使用

新建团队

版本控制工具(一)——SVN的具体使用
版本控制工具(一)——SVN的具体使用
版本控制工具(一)——SVN的具体使用
一般来说,我们需要对团队中的成员进行权限设置:
版本控制工具(一)——SVN的具体使用
这里我们把我们之前建好的团队加上去,(其实已经不用再修改了,可以看到我们之前设置的是所有人可读可写)(权限会根据实际情况由管理员自己设置,作为使用者我们不必担心这个问题):

版本控制工具(一)——SVN的具体使用
服务器这部分的操作我们就已经完成了,下面我们来模拟客户端使用场景。在这之前要检查你的客户端是否安装成功:
单击鼠标右键:
版本控制工具(一)——SVN的具体使用
出现这个就说明客户端安装成功了。
我们点击它,把仓库检出到本地:
版本控制工具(一)——SVN的具体使用
关于仓库的url地址你可能需要去服务器复制,它在这里:
版本控制工具(一)——SVN的具体使用
点击确定后它会要求你输入用户名和密码,这个用户名和密码就是我们之前创建好的用户:
版本控制工具(一)——SVN的具体使用
输入正确的用户名和密码后,点击确定:
版本控制工具(一)——SVN的具体使用
这个时候,你的电脑上就会多出一个文件夹,就是你从服务器检出的项目,比如我是放在桌面上的,它长这个样子:
版本控制工具(一)——SVN的具体使用
绿色的对勾表示状态正常。SVN项目会根据文件当前的状态而改变图标,我们接下来就会遇到。

checkout表示我们在本地新建了一个工作区,并且受SVN的版本控制,和服务器保持着联系。

我们接下来的所有操作都是基于这个工作区的。

场景一:向服务器提交自己创建的文件

目的:把我们写的东西同步到服务器。
我们打开上面检出的项目文件:
版本控制工具(一)——SVN的具体使用
当然,它和服务器保持着相同的项目结构,至于.svn这个文件是隐藏文件,表示这个目录受svn版本控制。
我们在trunk(主干)下新建一个文件:test.txt
版本控制工具(一)——SVN的具体使用
在里面输入内容并保存。然后右键空白处:
版本控制工具(一)——SVN的具体使用
把这个文件加入到变更列表中:
版本控制工具(一)——SVN的具体使用
点击确定后会给一个提示:
版本控制工具(一)——SVN的具体使用
可以看到此时我们的trunk图标已经发生改变:
版本控制工具(一)——SVN的具体使用
红色的感叹号表示这个文件下有变更,提示你提交。
点击进入trunk,可以发现test.txt的图标是蓝色的+号,表示这个文件是新增加的:
版本控制工具(一)——SVN的具体使用
add之后,此时我们再把这个文件提交到服务器,在空白处右键单击。选择 SVN Commit:
版本控制工具(一)——SVN的具体使用
进入提交页面:
版本控制工具(一)——SVN的具体使用
点击确定,会给出提示,注意这几个信息:
版本控制工具(一)——SVN的具体使用
提交成功,图标变回绿色的对号,我们可以返回服务器来确认一下:
版本控制工具(一)——SVN的具体使用

场景二:从服务器更新文件

目的:同步别人提交的文件。
从服务器更新文件非常简单,空白处右键,单击 SVN Update:
版本控制工具(一)——SVN的具体使用

场景三:修改文件并提交到服务器

目的:修改服务器的文件。
很简单,我们打开之间提交到服务器的test.txt文件并更改它的内容:

版本控制工具(一)——SVN的具体使用
保存。我们会发现test.txt文件的图标发生了变化:
版本控制工具(一)——SVN的具体使用
我们直接在空白处右键单击,选择提交。
版本控制工具(一)——SVN的具体使用
提交后你会发现现在是版本3。(你知道为什么吗?)
版本控制工具(一)——SVN的具体使用

场景四:新建一个文件夹提交到服务器

目的:一次性提交多个文件。
我们在trunk下新建一个test文件夹,并在其下放置两个文件:
版本控制工具(一)——SVN的具体使用
好了,现在把他们一起提交到服务器。做法和场景一类似。
说明:add的步骤你也可以省略,直接选择commit。

场景五:修改文件冲突

目的:了解为什么会冲突?冲突是怎么解决的?

前面我们的操作都是由jame来完成的。下面我们来扮演bob,bob也是团队的开发人员,他也会checkout服务器的文件到本地修改:

  1. bob从服务器更新项目到本地。找到了trunk目录下的test.txt文件,现在bob来修改这个文件:
    版本控制工具(一)——SVN的具体使用
    bob修改后,提交到服务器:
    版本控制工具(一)——SVN的具体使用
    但是此时jame并不知道这个文件被修改了,所以他没有更新项目,然后,jame也需要修改test.txt这个文件:
    版本控制工具(一)——SVN的具体使用
    然后提交变更到服务器:
    版本控制工具(一)——SVN的具体使用
    点击确定,但是可以预想到的是,提交失败:
    版本控制工具(一)——SVN的具体使用
    看,SVN会提示你这个文件的版本已经过时,需要你更新后再提交更改(你可以选择这么做)。这就产生了冲突。那么,冲突应该怎么解决呢?
    我们点击确定:
    版本控制工具(一)——SVN的具体使用
    我们选择更新:
    版本控制工具(一)——SVN的具体使用
    他就会提示你当前还有一个冲突存在:
    版本控制工具(一)——SVN的具体使用
    我们关闭这个会话框,返回我们的工作区,会发现多了这么几个文件:
    版本控制工具(一)——SVN的具体使用
  1. test.txt 这个文件是SVN为了解决冲突帮我们合成的文件,里面的内容会显示出bob和jame各自更改的内容,然后,由bob和jame商量,那些改动该保留,那些改动该删除。
  2. text.txt.mine 这个文件就是你自己(jame)修改后的文件。
  3. test.txt.r4和test.txt.r5分别表示产生冲突的前一个版本和后一个版本。

我们解决冲突参照这些文件在test.txt里面做改动,我们打开test.txt:
版本控制工具(一)——SVN的具体使用
那么,各自的改动都一目了然,由开发者自己商量做以保留,比如我们修改冲突后的文件是这样的:
版本控制工具(一)——SVN的具体使用
jame保存文件,返回工作区来解决冲突,右键单击空白处–SVN–Resolve:

版本控制工具(一)——SVN的具体使用
版本控制工具(一)——SVN的具体使用
点击确定:
版本控制工具(一)——SVN的具体使用
返回工作区,会发现之前的多余的文件都消失了,只剩下一个未提交的test.txt文件(解决冲突后)。此时,按照步骤正常提交它就可以:
版本控制工具(一)——SVN的具体使用

场景六:查看文件的提交记录

那么,比如有一天,jame发现了项目中的一处小bug,需要知道它是什么时候(哪一个版本)产生的,这个时候就需要去查阅日志。又或者jame提交文件是产生了冲突,就需要去查阅日志知道上一次操作这个文件的作者是谁。

查阅日志的步骤很简单:

版本控制工具(一)——SVN的具体使用
日志信息里记录了非常有用的信息:
版本控制工具(一)——SVN的具体使用

场景七:恢复文件的版本

jame发现了一个非常严重的问题,使得从版本3以后的版本都不能正常运行。团队需要从版本3开始重新开发,这个时候就需要回滚到之前的版本。
回滚版本时我们一般打开日志信息,根据日志选择你想要回滚的版本,比如我要回滚到版本3:
鼠标放在版本3处,右键单击,选择复原到此版本。英文版叫做 revert to this version
版本控制工具(一)——SVN的具体使用
会出现提示框:
版本控制工具(一)——SVN的具体使用
我们选择还原,然后返回工作区,commit

非常重要,版本回滚后一定要再提交一次!!
版本控制工具(一)——SVN的具体使用

场景八:版本之间的比较

有时候你需要知道两个版本之间到底发生了什么改动。那么就需要用到这个功能。

我们进入日志信息页面:
版本控制工具(一)——SVN的具体使用
选择两个你想比较的版本(按住ctrl多选),然后右键单击选择compare versions
版本控制工具(一)——SVN的具体使用
版本控制工具(一)——SVN的具体使用
单击变更内容就可以查看具体变动:
版本控制工具(一)——SVN的具体使用

场景九:本地删除文件提交到服务器

比如我现在要删除test.txt文件,在本地删除后,我们直接commit就可以。
版本控制工具(一)——SVN的具体使用

场景十:恢复误删除的文件

test.txt还有用,不能删除,那么就只能选择版本回滚。
svn-show log-回滚到上一个版本:
版本控制工具(一)——SVN的具体使用
回滚版本之后我们回到工作区:
版本控制工具(一)——SVN的具体使用
再次提交:
版本控制工具(一)——SVN的具体使用

场景十一:添加忽略文件

说明:

  1. 在团队开发时,每个人使用的开发工具不同,同样的开发工具其工作目录不同,因此在版本控制时,工程文件不应提交。
  2. 编译文件及临时文件、日志文件不需要进行版本控制。

步骤:

  1. 在要忽略文件上面点击右键,选择add to ignore list

  2. 选择要忽略的类型

操作演示:
版本控制工具(一)——SVN的具体使用

场景十二:创建分支后合并

说明:为什么要创建分支?
创建分支意味着你可能需要单独给你的项目添加一些新的特性,但是主干上的开发不能停止,那么这个时候你就需要单独开一个分支来进行开发。

  1. 创建分支
    我们把目录切换到trunk目录下,右键-svn-Branch/tag
    版本控制工具(一)——SVN的具体使用
    版本控制工具(一)——SVN的具体使用
    版本控制工具(一)——SVN的具体使用
    update之后,我们就会在本地的工作区找到trunk上的文件:
    版本控制工具(一)——SVN的具体使用
    而在服务器上,我们也可以看到该分支:
    版本控制工具(一)——SVN的具体使用
    现在我们在该分支下进行操作,比如新添加一个文件:
    版本控制工具(一)——SVN的具体使用
    选择提交:
    版本控制工具(一)——SVN的具体使用
    现在假设我们分支部分的内容已经开发完了,需要合并到主干上去,我们返回trunk,右键单击trunk-svn-merge
    版本控制工具(一)——SVN的具体使用
    选择T:
    版本控制工具(一)——SVN的具体使用
    版本控制工具(一)——SVN的具体使用
    版本控制工具(一)——SVN的具体使用
    合并成功后会给出提示。我们返回trunk目录下多了分支下的文件:
    版本控制工具(一)——SVN的具体使用
    选择提交,commit。
    版本控制工具(一)——SVN的具体使用
    合并完成。分支使用完毕后应该及时删除,操作参考场景九。

SVN的一些基础使用我们总结完了,更多的功能需要你在实际使用中体会。

全文完。