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
的项目: