1.概述

有一个简单但不十分精确比喻: SVN = 版本控制 + 备份服务器

简单的说,我们可以把SVN当成备份服务器,更好的是,它可以帮我们记住每次上传到这个服务器的档案内容,并且自动的赋予每次的变更一个版本。

因此,在企业团队工作中,SVN的使用就尤为重要。

2.SVN软件

2.1.简介

通常,我们称用来存放上传档案的地方就做Repository。用中文来说,有点像是档案仓库的意思。不过,通常我们还是使用Repository这个名词。基本上,第一次我们需要有一个新增(add)档案的动作,将想要备份的档案放到Repository上面。日后,当您有任何修改时,都可以上传到Repository上面,上传已经存在且修改过的档案就叫做commit,也就是提交修改给SVN server的意思。针对每次的commit,SVN server都会赋予他一个新的版本。同时,也会把每次上传的时间记录下来。日后,因为某些因素,如果您需要从Repository下载曾经提交的档案。您可以直接选择取得最新的版本,也可以取得任何一个之前的版本。如果忘记了版本,还是可以靠记忆尝试取得某个日期的版本。

2.2.安装

下载Windows 端程序:http://tortoisesvn.net/downloads。一般而言,如果是32-bit的操作系统应该使用TortoiseSVN-1.4.x.xxxx-win32-svn-1.4.x.msi这个文件。如果是64-bit 的操作系统,则应该使用TortoiseSVN-1.4.x.xxxx-x64-svn-1.4.x.msi 这个文件。

执行下载回来的TortoiseSVN 安装程序,就会进行TortoiseSVN 的安装。正确安装后,应该进行一次的重开机,以确保TortoiseSVN 的正确无误。

2.3.建立work目录

通常来说,work目录就是我们平常用来存放工作档案的地方。通常我们会等到自己的工作做的一个段落的时候再进行备份。所以我们平常都是在某个特定的目录下面工作,等到适当时机在commit到repository中,这个特定的目录就work目录。

举个例子,比如我们想在D盘下建立一个名为work的目录,首先要先把这个目录建立出来如图2-3-1,此时该目录为空。

SVN使用心得_服务器

图2-3-1

然后在文件夹中右键出现图2-3-2的菜单,点击SVN Checkout,会弹出图2-3-3的对话框。

SVN使用心得_svn_02

​​

SVN使用心得_Eclipse_03

图2-3-2                   图2-3-3

首先我们要填入的是repository的位置,对于SVN来说,repository的位置都是URL。然后确认directory是否是work目录,最后按下ok按钮。就可以看到如图2-3-4的讯息窗口了。

SVN使用心得_Eclipse_04

图2-3-4

最后显示Completed表示完成,点击OK按钮完成。这时候,回到目录就可以看到已经更新的东西了。

2.4.新增档案及目录到Repository中

假设已经有工作文档保存在2.3介绍的work目录中,这时想要把它们放到Repository中,那么我们就需要做以下的操作。

首先,选择想要上传的文件夹,右键点击,如图2-4-1,选择Add。

SVN使用心得_服务器_05

图2-4-1

SVN使用心得_svn_06

图2-4-2

如图2-4-2,选择需要放入Repository中的文件然后点击OK,然后会显示讯息窗口。接下来,有一点要注意的是,这个Add的动作并未真正的将档案放到Repository中。仅仅是告知SVN准备要在Repository中放入这些档案。此时,如果我们透过档案管理员查看这些档案,应该会看到一个白色红底的惊叹号在文件夹图标的下方。这是表示我们的work目录中的文件与Repository中的文件还没有同步。现在我们要多一个commit的动作。让这些档案真正的放入到Repository中。

SVN使用心得_Eclipse_07

图2-4-3

如图2-4-3,选择这些目录或者在该目录的空白处按下右键,选择SVN Commit。

接下来会显示如图2-4-4的对话框,选中要commit到Reponsitory的文件。

SVN使用心得_SVN_08

图2-4-4

点击OK以后,就将文件真正上传至Reponsitory中了,而文件也会由白色红底感叹号的标记变化为绿色√的标志。

2.5.更新档案及目录

我们首先要明确一个问题,我们为何需要更新?由于版本控制系统多半都是由许多人共同使用,所以,同样的文件可能还有人会去进行编辑。为了确保我们工作目录中的文件与Repository中的文件是同步的,我们需要在编辑前都先进行更新的动作。在此,我们都先假设已经将文件check out过一次,现在要说明的是如何在一个check out过的目录进行update。在想要更新的文件或目录图标上面按下鼠标右键,并且选择SVN Update。如图2-5-1:

SVN使用心得_服务器_09

图2-5-1

然后就会出现讯息窗口,如图2-5-2:

SVN使用心得_服务器_10

图2-5-2

正常的状况下,我们可以看到如上的窗口,在这个窗口中会显示有哪些文件更新了。如果没有看到文件更新的相关信息,这表示目录中的文件已经是最新的,所以无须进行更新。

2.6.更新至特定版本

有时我们需要回溯至特定的日期或是版本,这时就可以利用SVN的Update to revision的功能。在想要更新的文件或目录的图标上面按下鼠标右键。并且选择TortoiseSVN->Update to revision。如图2-6-1所示:

SVN使用心得_server_11

图2-6-1

SVN使用心得_svn_12

图2-6-2

在这个Update窗口中(如图2-6-2),我们可以选择更新到最新版本(HEAD),也可以选择更新到某个指定的版本(Revision)。当然,我们可能早就记不起来正确的版本号码。可能只隐约的记得大概在什么时间。没关系,按下Show log按钮,我们就可以回顾历史了。如图2-6-3:

SVN使用心得_服务器_13

图2-6-3

所有我们曾经做过的动作,及其日期与对应的版本都会列在这个窗口上面,只要在想要的版上面点一下,让它变成选中,然后按下OK。这个版本就会自动填入Update窗口中的Revision字段中。然后只要再按下一次OK,这个版本就会被取出来到我们的硬盘中。

3.Eclipse插件

3.1.简介

在Eclipse中存在这样的SVN插件,用于确保项目在团队开发时的版本管理以及代码同步。AEAI DP作为基于Eclipse为原形的开发平台,同样内置了SVN的插件。下面我将简单介绍一下它几个的功能。

3.2.共享项目

选择Java透视图窗口,选择想要共享的项目,右键点击,选择Team->Share Project。如图3-2-1:

SVN使用心得_Eclipse_14

图3-2-1

然后进入如图3-2-2,选择SVN,点击Next,这时进入图3-2-3:

SVN使用心得_Eclipse_15

图3-2-2

SVN使用心得_svn_16

图3-2-3

如图3-2-3,我们可以选择创建新的资源库位置,还是使用已有的资源库位置。然后点击Next,进入图3-2-4:

SVN使用心得_Eclipse_17

图3-2-4

我们就可以选择默认,使用项目名称作为文件夹名。然后点击Finish完成设置。

3.3.与资源库同步

在设置完之后,我们就可以对该项目进行SVN的各种操作了。所有的操作都是要先右键选择该项目,然后在Team中选择二级菜单,如图3-3-1,后面我将不再赘述。

SVN使用心得_SVN_18

图3-3-1

接下来讲讲“与资源同步”功能,点击之后会进入如图3-3-2的透视图中。

SVN使用心得_SVN_19

图3-3-2

在这里会记录,我们有哪些代码与SVN上面的代码不同。然后我们可以根据这些记录来对这些文件进行对应的操作,如更新、提交、合并等。

3.4.更新

更新包含两个,一个是更新到最新版本,一个是按版本更新。我们可以在菜单中找到这两个选择,一个就是更新、另一个就对应着Update to Version。如图3-4-1所示。

SVN使用心得_Eclipse_20

图3-4-1

点击更新就可以对该项目进行更新,将其更新至最新版本。点击Update to Version,如图3-4-2:

SVN使用心得_服务器_21

图3-4-2

将红框内的对号取消,点击显示日志,然后弹出如图3-4-3所示的对话框,选中一个版本,会在下面显示变动的位置等。然后点击OK,会在Revision处自动填入版本号,然后再点OK,开始按该版本更新。

SVN使用心得_svn_22

图3-4-3

3.5.提交

如图3-5-1,在与资源库同步时,发现有这样的黑箭头,说明你在这里有更改,与原版本代码不同。这时候,我们可以选择提交。

SVN使用心得_Eclipse_23

图3-5-1

我们可以有两种提交方式,一种就是在图3-5-1所示的Synchronize透视图中,直接右键选择提交,如图3-5-2所示:

SVN使用心得_服务器_24

图3-5-2

另外还有一种,就是直接在Java透视图中,右键Team-->提交。如图3-5-3所示:

SVN使用心得_SVN_25

图3-5-3

3.6.合并

当团队中的其他同事对代码进行提交之后,而我们自己也已经对代码进行更改了。这时候,我们就需要合并操作了。如图3-6-1:

SVN使用心得_server_26

图3-6-1

红色的箭头表示上述的那种情况,我们可以双击这个文件打开,查看有变动的代码。这时会有一下几种情况:

  1. 本地代码完全舍弃,把服务器的代码完全覆盖到本地。
  2. 完全以本地为主,服务器上的代码完全舍弃。
  3. 将服务器上的代码,选择性的更新到本地,包括从服务器上添加到本地、根据服务器将本地代码删除。

和b的情况就比较简单,如图3-6-2所示,a的情况可以选择覆盖/更新选项,将代码覆盖到本地。如果是b的情况,可以直接点击标记为合并,然后如果有需要可以再将其提交到服务器。这时候服务器上的代码就变成我们本地的代码了,而原代码就被舍弃了。

SVN使用心得_服务器_27

图3-6-2

如果像c这样的情况,就需要手动去合并了,在比较的页面中,我们可以很清楚的看到,哪些代码是我们本地有的而服务器上没有的,或者哪些是服务器上有的而我们本地没有的。如图3-6-3所示:

SVN使用心得_服务器_28

图3-6-3

红圈的位置标记的是在代码有变化的位置会显示一个长方形,如果选择这个长方形,会让光标直接跳转到有变化的位置。注意这里的颜色的变化,如果长方形是黑色的,说明该处变动是由于我们这边代码有新增,而服务器段没有。如果新增的代码不再需要了,就可以直接在左侧(本地)框中删掉,或者点击在上面的橙色的位置的按钮。如果这新增的代码不需要删除需要保留,则不做操作。

如果长方形的颜色为蓝色,说明该处变动是由于服务器上的代码有新增,而本地代码没有。如果服务器中的代码需要保留到本地,则可以点击橙色位置的按钮,将右侧(服务器)上的代码复制到左侧(本地)中。也可以直接点击两者中间连线的按钮位置,将右侧(服务器)上的代码复制到左侧(本地)中。

在所有的代码都处理完毕之后,就可以标记为合并了,方法和图3-6-2显示的一样。然后,如果有需要,可以再将本地的代码重新提交到服务器上。



SVN使用心得文档   ​下载