TortoiseSVN进阶使用

  • 格式:pdf
  • 大小:938.60 KB
  • 文档页数:19

TortoiseSVN使用

I 目录

1. 建立工作副本 ................................................................ 1

2. 新增文件及目录 ............................................................ 3

3. 更新文件及目录 ............................................................ 8

3.1 冲突的产生 .................................................................... 9

3.2 冲突的解决 .................................................................. 12

4. 更新至特定版本 .......................................................... 14

5. 分支和标签 ................................................................. 16 TortoiseSVN使用

1 1. 建立工作副本

工作副本(Working copy)其实就是您平常用来存放工作资料的地方。因为我们所需的工

作资料都是存放在SVN服务器上的仓库中(repository),但是我们平常修改这些资料不可能

是直接编辑存放在服务器上的资料,所以我们首先要从服务器上检出(check out)所需的工作

资料到本地磁盘,之后我们所有的修改都在本地进行。一旦我们的修改工作确认完成了再把

本地的修改提交(commit)到服务器上。举例来说,我们想在E盘下面建立一个名为project

的目录。

首先先把这个目录建立出来。

此时,这个目录应该为空的。

点击右键后(您可以在project目录的图标上按,也可进入project目录后,在空白的地方

按),选择SVN checkout。 TortoiseSVN使用

2

接着您可以看到如下的画面:

首先我们要填入的是repository的位置,对于SVN来说,repository的位置都是URL。

通过客户端访问服务器的URL格式为:svn://服务器路径/repository所在目录/子目录。由于

我们已经在服务器上建立了一个测试用的repository,因此,我们现在要在URL of repository

这一栏填入svn://192.168.1.2/test。

按下OK按钮后,再到您刚刚建立的目录下。您将会看到project目录下面多了一个testTortoiseSVN使用

3 目录。Test目录下已经下载了服务器上test目录下的所有资料,同时有一个名为.svn的目录

(这个目录是隐藏的,如果您没有设定可以看到隐藏目录,您将无法看到它) 。

SVN会在您的工作目录下,以及其子目录下建立这个.svn的子目录。您不应该进入这

个目录,尤其不应该更动这个目录下面的任何内容,否则很可能会造成SVN无法正常运作。

2. 新增文件及目录

您开始开发一个新的程序。假设您开发的程序将放在前面建立的test目录下面的src子

目录。如下所示: TortoiseSVN使用

4

假设您已经编辑好文件,准备把他们放到SVN的repository中。您需要在src目录的图

标上面,按鼠标右键,并且选择TortoiseSVN->Add: TortoiseSVN使用

5

接着,TortoiseSVN会把准备要加入的文件及目录,显示给您看。打勾的就是等下要被

加入到Repository中的。如果您有某些文件或是目录不想在这次加入,您可以让该项目不要

被勾选。如此,它就不会被加入到Repository去。

按下OK后,您将会看到如下的讯息窗口: TortoiseSVN使用

6

这样就表示成功了。有一点要注意的是,这个Add的动作并未真正的将资料放到服务

器的Repository中。仅仅是告知本地SVN准备要在Repository中放入这些资料。

让这些资料真正的放入到Repository中。您可以在src目录的图标上或者是src目录内

的空白处按下鼠标右键,叫出如下的选单,并且选择SVN commit。

紧接着,您将会看到如下的窗口出现: TortoiseSVN使用

7

在这个窗口中,下半部会列出一个清单,让您清楚的了解到哪些资料要被commit到

repository中。同样的,如果您有资料不想在这个时候commit到Repository,您可以取消该

资料的选取,这样他们就不会被commit到Repository中。

在资料列表的上方是Message栏,您可以在栏中输入本次commit的目的。这是十分重

要的选项,当您commit的次数很多时,可以靠这个信息知道版本与版本之间的差异。当您

输入好Message,按下OK之后,就可以看到如下的窗口出现,通知您已经将指定的资料送

到Repository中了。 TortoiseSVN使用

8

您可以到先前的文件夹中,确定是否所有的文件的图标都有如下的绿色勾勾在上面,这

样代表您的资料都正确无误地提交到repository中了。

有时候,因为Windows本身的问题,您可能会看到有些图标没有变成绿色的勾勾。此

时,多按F5刷新几次,应该就可以解决这个问题。如果,仍然不行,表示您之前的commit

动作真的有问题。请仔细检查之前的commit动作是否正确。

3. 更新文件及目录

为何需要更新?由于版本控制系统多半都是由许多人共同使用。所以,同样的资料可能TortoiseSVN使用

9 还有其他人会去进行编辑。为了确保您工作副本目录中的资料与Repository中的资料是同步

的,建议您在编辑前都先进行更新的动作。在此,我们都先假设您已经将资料check out过

一次了。现在要说明的是如何在一个check out过的目录进行update。在想要更新的文件或

目录图标上面按下鼠标右键,并且选择SVN Update。在update的过程当中有可能产生冲突,

一旦产生冲突,一定要先解决冲突才能进行下一步的动作。冲突的解决可以说是使用SVN

比较复杂的操作了。下面我们详细讲解冲突的产生和解决。

3.1 冲突的产生

假设我们服务器上有个文件schedule.txt,其内容见下

本地的工作副本也已更新到这个状态。

现在有另外一个同事把星期三的安排由coding改为vocation,并提交到SVN上去。那

么此时SVN上的schedule.txt文件的内容为 TortoiseSVN使用

10

而本地在没有更新SVN上的文件的前提下,由于紧急事件需要把vocation改为meeting,

于是本地的schedule.txt文件内容为

然后把本地的改动commit到服务器上。 TortoiseSVN使用

11

SVN报错。报错的原因是其他同事也修改了schedule.txt文件,所以本地必须先update

该文件,之后才能提交。

Update完成后,SVN提示有冲突发生,并在有冲突发生的文件上显示感叹号,同时可

以发现增加了几个文件:后缀为mine的文件表示本地该文件update之前的内容,后缀为r3、

r4的分别表示SVN服务器上版本3、4的该文件内容。

打开schedule.txt文件,可以看到冲突的地方已经做了标记。 TortoiseSVN使用

12

发生冲突的原因就是文本原来的第三行Wednesday后面不知道该是voaction还是

meeting:SVN无法帮我们做决定。这时候SVN就显示文件有冲突,需要我们手动去解决。

3.2 冲突的解决

简单的情况下,我们可以直接从schedule.txt.mine,schedule.txt.r3,schedule.txt.r4中选

择合适的来覆盖掉冲突文件schedule.txt即可。

复杂的情况下,最后的文件内容可能需要综合mine、r3、r4的内容,这时就必须使用

SVN提供的冲突解决工具。

选择要解决冲突的文件schedule.txt,点击右键 TortoiseSVN使用

13

冲突的地方用红色标出,三个窗口分别是theirs、mine、merge,其中merge中的冲突地

方用问号代替,需要我们去选择内容,在这个地方点击右键 TortoiseSVN使用

14

可以选择各种内容组合来解决这个冲突。

如果有多个冲突,逐一解决即可。全部解决完毕之后,再点击菜单栏的mark as resolved

按钮表示冲突解决完毕即完成。

4. 更新至特定版本

有时我们需要回溯至特定的日期或是版本,这时就可以利用SVN的Update to revision

的功能。在想要更新的文件或目录图标上面按下鼠标右键。并且选择TortoiseSVN->Update to

revision,会弹出窗口 TortoiseSVN使用

15

在这个Update窗口中,您可以选择更新到最新版本(HEAD)。也可以选择更新到某个指

定的版本(Revision)。当然,您可能早就记不起来正确的版本号码,可能只隐约的记得大概

在什么时间。没关系,按下Show log按钮,您就可以回顾历史了。

所有您曾经做过的动作,及其日期与对应的版本都会列在这个窗口上面,只要在你想要TortoiseSVN使用

16 的版上面点一下,让他变成反白,然后按下OK。这个版本就会自动填入Update窗口中的

Revision字段中。您只要再按下一次OK,这个版本就会被取出来到您的本地目录了。

5. 分支和标签

之前的操作我们都是在主目录上进行的操作。这个主目录称之为主干(trunk),我们的开

发过程基本上都是在主干目录上进行资料的修改。但是有时候只有一个主干目录并不能很好

的满足要求。比如:现在主干上的工程需要添加一个新的功能,但是这个新的功能我们没有

十足的把握一定能开发成功。如果此时我们把这个功能的开发的和其他的功能开发都放在主

干目录上。一旦最后这个功能开发失败,那么我们就不能简单的把主干上的目录恢复到之前

的某个版本,以消除这个功能开发所加进来的改动。这时候我们需要建立分支(branch)。分

支其实跟主干没有大的区别,可以看做是主干上的某个版本的延伸。如果分支上的功能开发

完成了,可以把资料的改动全部合并(merge)到主干上去。这样子,分支上的功能无论开发

成功与否都不会对主干造成影响。

主干上开发到一定程度时,觉得是个里程碑的时刻了或者已经可以发布给客户使用了,

这时可以把当前主干的现状做个备份,以方便以后回溯或者查看,也就是需要建立一个标签

(tag),相当于对当前的工程状态做了个快照。

本质上来讲,分支与标签完全相同,只是分支可能会需要合并回原来的主干中,而标签

不需要合并回主干中。所以您会看到在SVN的选单上面,分支与标签是同一个项目。以这

个建立一个发布版本1.0的例子来说,我们就是在主干上面,按下鼠标右键,选择Branch/Tag

的项目: