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,此时该目录为空。
图2-3-1
然后在文件夹中右键出现图2-3-2的菜单,点击SVN Checkout,会弹出图2-3-3的对话框。
图2-3-2 图2-3-3
首先我们要填入的是repository的位置,对于SVN来说,repository的位置都是URL。然后确认directory是否是work目录,最后按下ok按钮。就可以看到如图2-3-4的讯息窗口了。
图2-3-4
最后显示Completed表示完成,点击OK按钮完成。这时候,回到目录就可以看到已经更新的东西了。
2.4.新增档案及目录到Repository中
假设已经有工作文档保存在2.3介绍的work目录中,这时想要把它们放到Repository中,那么我们就需要做以下的操作。
首先,选择想要上传的文件夹,右键点击,如图2-4-1,选择Add。
图2-4-1
图2-4-2
如图2-4-2,选择需要放入Repository中的文件然后点击OK,然后会显示讯息窗口。接下来,有一点要注意的是,这个Add的动作并未真正的将档案放到Repository中。仅仅是告知SVN准备要在Repository中放入这些档案。此时,如果我们透过档案管理员查看这些档案,应该会看到一个白色红底的惊叹号在文件夹图标的下方。这是表示我们的work目录中的文件与Repository中的文件还没有同步。现在我们要多一个commit的动作。让这些档案真正的放入到Repository中。
图2-4-3
如图2-4-3,选择这些目录或者在该目录的空白处按下右键,选择SVN Commit。
接下来会显示如图2-4-4的对话框,选中要commit到Reponsitory的文件。
图2-4-4
点击OK以后,就将文件真正上传至Reponsitory中了,而文件也会由白色红底感叹号的标记变化为绿色√的标志。
2.5.更新档案及目录
我们首先要明确一个问题,我们为何需要更新?由于版本控制系统多半都是由许多人共同使用,所以,同样的文件可能还有人会去进行编辑。为了确保我们工作目录中的文件与Repository中的文件是同步的,我们需要在编辑前都先进行更新的动作。在此,我们都先假设已经将文件check out过一次,现在要说明的是如何在一个check out过的目录进行update。在想要更新的文件或目录图标上面按下鼠标右键,并且选择SVN Update。如图2-5-1:
图2-5-1
然后就会出现讯息窗口,如图2-5-2:
图2-5-2
正常的状况下,我们可以看到如上的窗口,在这个窗口中会显示有哪些文件更新了。如果没有看到文件更新的相关信息,这表示目录中的文件已经是最新的,所以无须进行更新。
2.6.更新至特定版本
有时我们需要回溯至特定的日期或是版本,这时就可以利用SVN的Update to revision的功能。在想要更新的文件或目录的图标上面按下鼠标右键。并且选择TortoiseSVN->Update to revision。如图2-6-1所示:
图2-6-1
图2-6-2
在这个Update窗口中(如图2-6-2),我们可以选择更新到最新版本(HEAD),也可以选择更新到某个指定的版本(Revision)。当然,我们可能早就记不起来正确的版本号码。可能只隐约的记得大概在什么时间。没关系,按下Show log按钮,我们就可以回顾历史了。如图2-6-3:
图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:
图3-2-1
然后进入如图3-2-2,选择SVN,点击Next,这时进入图3-2-3:
图3-2-2
图3-2-3
如图3-2-3,我们可以选择创建新的资源库位置,还是使用已有的资源库位置。然后点击Next,进入图3-2-4:
图3-2-4
我们就可以选择默认,使用项目名称作为文件夹名。然后点击Finish完成设置。
3.3.与资源库同步
在设置完之后,我们就可以对该项目进行SVN的各种操作了。所有的操作都是要先右键选择该项目,然后在Team中选择二级菜单,如图3-3-1,后面我将不再赘述。
图3-3-1
接下来讲讲“与资源同步”功能,点击之后会进入如图3-3-2的透视图中。
图3-3-2
在这里会记录,我们有哪些代码与SVN上面的代码不同。然后我们可以根据这些记录来对这些文件进行对应的操作,如更新、提交、合并等。
3.4.更新
更新包含两个,一个是更新到最新版本,一个是按版本更新。我们可以在菜单中找到这两个选择,一个就是更新、另一个就对应着Update to Version。如图3-4-1所示。
图3-4-1
点击更新就可以对该项目进行更新,将其更新至最新版本。点击Update to Version,如图3-4-2:
图3-4-2
将红框内的对号取消,点击显示日志,然后弹出如图3-4-3所示的对话框,选中一个版本,会在下面显示变动的位置等。然后点击OK,会在Revision处自动填入版本号,然后再点OK,开始按该版本更新。
图3-4-3
3.5.提交
如图3-5-1,在与资源库同步时,发现有这样的黑箭头,说明你在这里有更改,与原版本代码不同。这时候,我们可以选择提交。
图3-5-1
我们可以有两种提交方式,一种就是在图3-5-1所示的Synchronize透视图中,直接右键选择提交,如图3-5-2所示:
图3-5-2
另外还有一种,就是直接在Java透视图中,右键Team-->提交。如图3-5-3所示:
图3-5-3
3.6.合并
当团队中的其他同事对代码进行提交之后,而我们自己也已经对代码进行更改了。这时候,我们就需要合并操作了。如图3-6-1:
图3-6-1
红色的箭头表示上述的那种情况,我们可以双击这个文件打开,查看有变动的代码。这时会有一下几种情况:
- 本地代码完全舍弃,把服务器的代码完全覆盖到本地。
- 完全以本地为主,服务器上的代码完全舍弃。
- 将服务器上的代码,选择性的更新到本地,包括从服务器上添加到本地、根据服务器将本地代码删除。
和b的情况就比较简单,如图3-6-2所示,a的情况可以选择覆盖/更新选项,将代码覆盖到本地。如果是b的情况,可以直接点击标记为合并,然后如果有需要可以再将其提交到服务器。这时候服务器上的代码就变成我们本地的代码了,而原代码就被舍弃了。
图3-6-2
如果像c这样的情况,就需要手动去合并了,在比较的页面中,我们可以很清楚的看到,哪些代码是我们本地有的而服务器上没有的,或者哪些是服务器上有的而我们本地没有的。如图3-6-3所示:
图3-6-3
红圈的位置标记的是在代码有变化的位置会显示一个长方形,如果选择这个长方形,会让光标直接跳转到有变化的位置。注意这里的颜色的变化,如果长方形是黑色的,说明该处变动是由于我们这边代码有新增,而服务器段没有。如果新增的代码不再需要了,就可以直接在左侧(本地)框中删掉,或者点击在上面的橙色的位置的按钮。如果这新增的代码不需要删除需要保留,则不做操作。
如果长方形的颜色为蓝色,说明该处变动是由于服务器上的代码有新增,而本地代码没有。如果服务器中的代码需要保留到本地,则可以点击橙色位置的按钮,将右侧(服务器)上的代码复制到左侧(本地)中。也可以直接点击两者中间连线的按钮位置,将右侧(服务器)上的代码复制到左侧(本地)中。
在所有的代码都处理完毕之后,就可以标记为合并了,方法和图3-6-2显示的一样。然后,如果有需要,可以再将本地的代码重新提交到服务器上。
SVN使用心得文档 下载