TortoiseSVN使用简介

2009-04-24 来源:dev.idv.tw 数据库

安装及下载client 端

  1. 下载Windows 端程序:http://tortoisesvn.net/downloads。通常而言,若是是32-bit的Windows XP 应该使用TortoiseSVN-1.4.x.xxxx-win32-svn-1.4.x.msi 这个档案。若是是64-bit 的操做系统,则应该使用TortoiseSVN-1.4.x.xxxx-x64-svn-1.4.x.msi 这个档案。
  2. 执行下载回来的TortoiseSVN 安装程序,就会进行TortoiseSVN 的安装。正确安装后,应该进行一次的重开机,以确保TortoiseSVN 的正确无误。
  3. 安装成功后,在档案管理员内按下鼠标右键,应该能够看到以下的画面:

图像:Tsvn_01.png

大部分的TortoiseSVN的操做都是透过档案管理员及鼠标右键就能够完成了。若是您以前使用过TortoiseCVS,应该会对这种操做方式感到十分亲切。 安全

什么是SVN(Subversion)?

有一个简单但不十分精确比喻: 服务器

SVN = 版本控制 + 备份服务器

简单的说,您能够把SVN当成您的备份服务器,更好的是,他能够帮您记住每次上传到这个服务器的档案内容。而且自动的赋予每次的变动一个版本。 ssh

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

为甚么要用SVN?
  1. 备份工做档案是十分重要的。您永远不知道计算机上的硬盘什么时候会坏掉。根据经验法则再加上摩菲定理,坏事情每每都发生在最重要的时刻。例如,要 release东西的前一刻,硬盘彻底坏掉,没法修复。因此,经常备份工做数据是很是重要的。大部分公司的server都会有专门的备份机制,甚至是异地备援。绝对比放在本身的计算机里头,或是随身碟上面来的安全。
  2. 版本控管很是重要。您没法保证手头上最新版本永远都是对的。不少时候,在通过数天努力工做后,您才发现走错方向。须要将全部的修改回复到数天前版本。没有几我的可以彻底记住本身修改过什么东西。若是没有作好版本控管,那么,最差的情况就是要所有重来。
  3. 伙伴间的数据同步也是很是重要的。不少时候,除了您我的外,还有其它的伙伴也须要您的档案。怎么把最新的档案提供给伙伴呢?用e-mail?根据经验,用 e-mail是一个不好的办法。到了最后,根本就不知道哪一封e-mail才是新的。由于可能您最新的e-mail已经被当成垃圾信给丢了。别忘了,如今不少e-mail软件都有anti-spam的功能,说不定这些信件都被当成广告信给处理掉了。并且,您也应该知道通常档案若是放在e-mail内,档案大小会变得比较大(一般是原来的4/3倍以上)。若是天天更新一次,恐怕几天没收信的话,信箱就爆了!
  4. 若是没有一个好的办法,备份不一样版本是很耗费硬盘空间的。例如:您有一个总共10MB的目录,使用单纯的档案备份。若是有10个版本就会变成100MB。 20个版本就有200MB。若是,不想备份这么多版本,势必就是要减小备份的次数。拉长备份周期将会致使数据遗失的危险性增高。把旧的不须要的备份删除?根据经验,只要时间一拉长,您跟本就不知道一个月之前的版本是重要或者是不重要。

SVN能帮咱们解决上面的问题吗?答案是确定的: post

  1. SVN Repository能够是本身计算机上的一个目录,或者是随身碟(不建议这样用)。固然也能够是公司的服务器。
  2. SVN有很棒的版本控管机制。全部上传的版本都会帮您记录下来。往后您能够随时取得某一个时刻的版本。并且,也有版本分支及合并等好用的功能。
  3. SVN可让不一样的开发者存取一样的档案,而且利用SVN Server做为档案同步的机制。也就是说,您有档案更新时,无须将档案寄给您的开发成员。只须要告诉他新的版本已经在SVN Server上面,请他本身去SVN Server上面就能够取得最新版本。并且,SVN Server也能够作到当您上传新版本后,自动发信给相关的成员。
  4. SVN的存放档案方式是采用差别备份的方式。也就是说,他只会备份有不一样的地方。因此很省硬盘空间。此外,他也能够针对所谓的非文字文件进行差别备份。

怎么样在Windows下面创建SVN Repository?

假设您已经安装前面所说起的TortoiseSVN这套软件,如今咱们先告诉您如何用本身的硬盘或是随身碟看成SVN Repository的存放地点。若是您只想知道如何存取一个已经创建好的SVN Server上面的Repository,请直接跳过本节。 加密

假设您的要放置Repository的地方是E槽。您须要先创建一个空的目录。如下面的例子而言,咱们在E槽下面创建了一个名为svn_repo的目录。 SVN并无限定Repository目录名称。您能够创建任何您本身喜欢的名称。可是,强烈建议勿使用非英文的档名(如中文或日文)。 spa

图像:Tsvn_02.png

透过您的档案管理员,在E:\svn_repo的Icon上面,按下鼠标右键后,选择TortoiseSVN->Create repository here。 操作系统

图像:Tsvn_03.png

接着,您会看到以下的一个窗口,这个窗口主要是问您,您但愿使用的Repository数据库格式是FSFS仍是BDB。基本上,请选择FSFS就能够了。按下OK按钮后,您将能够看到下一个画面。 .net

图像:Tsvn_04.png

这就表示您的SVN repository已经成功的创建了。接下来就是要把您的档案备份进来。往后,只要须要使用这个repository,咱们就可使用 file:///E:/SVN_REPO表示它。SVN就是透过这种URL的方式到如何与Repository取得联系。各类URL的格式以下:

file:///磁盘驱动器|/repository所在目录/子目录
http://帐号@服务器名称/ repository所在目录/子目录
https://帐号@服务器名称/ repository所在目录/子目录
svn+ssh://帐号@服务器名称/ repository所在目录/子目录

其中,http表示使用通常的超文字传输通信协议。https表示使用加密的超文字传输通信协议。svn+ssh表示透过SSH加密通信的管道,进行存取。

创建一个Working目录

所谓的Working目录其实就是您日常用来存放工做档案的地方。一般咱们会等到本身的工做作的一个段落的时候再进行备份。因此咱们日常都是在 Working目录下面工做,等到适当时机在commit到repository中。举例来讲,咱们想在D槽下面创建一个名为working的目录。首先先把这个目录创建出来。

图像:Tsvn_05.png

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

在档案管理员中按下右键后(您能够在working目录的icon上按,也可进入working目录后,在空白的地方按),选择SVN checkout。

图像:Tsvn_06.png

接着您能够看到以下的画面:

图像:Tsvn_07.png

首先咱们要填入的是repository的位置,对于SVN来讲,repository的位置都是URL。因为咱们前面已经在E槽创建一个repository,所以,咱们如今要在URL of repository这一栏填入file:///E:/svn_repo/。

接着,稍微看一下Checkout directory,这个字段应该要指向您的working目录。确认后,按下OK按钮,您应该能够看到以下的讯息窗口。

图像:Tsvn_08.png

这样就表示动做完成。按下OK按钮后,再到您刚刚创建的目录下。您将会看到working目录下面多了一个名为.svn的目录(这个目录是隐藏的,若是您的档案管理员没有设定能够看到隐藏目录,您将没法看到它) 。

图像:Tsvn_09.png

SVN会在您的工做目录下,以及其子目录下创建这个.svn的子目录。您不该该进去这个目录,尤为不该该更动这个目录下面的任何内容。不然会极可能会形成SVN没法正常运做。

因为,原来的repository是空的,因此咱们如今的working目录也是空的。若是您如今checkout的是一个已经有内容的repository,您将会看到working目录下面如今多了许多目录及档案。

若是您要在一个已经存在的SVN Server上面checkout出上面的档案,您只须要给定正确的URL以及working目录的名称。就能够取得指定的档案及目录了。

新增档案及目录到Repository中

假设您前面的动做都无误。如今您开始开发一个新的程序。假设您开发的程序将放在前面创建的working目录下面的my_ prj子目录。以下所示:

图像:Tsvn_10.png 图像:Tsvn_11.png

假设您已经编辑好档案,准备把他们放到SVN的repository中。您须要在my_prj目录的icon上面,按鼠标右键,而且选择TortoiseSVN->Add:

图像:Tsvn_12.png

接着,TortoiseSVN会把准备要加入的档案及目录,显示给您看。打勾的就是等下要被加入到Repository中的。若是您有某些档案或是目录不想在此次加入,您可让该项目不要被勾选。如此,它就不会被加入到Repository去。

图像:Tsvn_13.png

按下OK后,您将会看到以下的讯息窗口:

图像:Tsvn_14.png

这样就表示成功了。有一点要注意的是,这个Add的动做并未真正的将档案放到Repository中。仅仅是告知SVN准备要在Repository中放入这些档案。此时,若是您透过档案管理员查看这些档案,应该会看到一个白色红底的惊叹号在档案icon的下方。

图像:Tsvn_15.png

这是表示您的working目录中的档案与Repository中的档案尚未同步。如今咱们要多一个commit的动做。让这些档案真正的放入到 Repository中。您能够在my_prj目录的icon上或者是my_prj目录内的空白处按下鼠标右键,叫出以下的选单,而且选择SVN commit。

图像:Tsvn_16.png

紧接着,您将会看到以下的窗口出现:

图像:Tsvn_17.png

在这个窗口中,下半部会列出一个清单,让您清楚的了解到哪些档案要被commit到repository中。一样的,若是您有档案不想在这个时候commit到Repository,您能够取消选取的档案,这样他们就不会被commit到Repository中。

在档案列表的上方是Message栏,您能够在栏中输入本次commit的目的。这是十分重要的字段,当您commit的次数不少时,能够靠这个讯息知道版本与版本之间的差别。当您输入好Message,按下OK以后,就能够看到以下的窗口出现,通知您已经将指定的档案送到Repository中。

图像:Tsvn_18.png

您能够到先前的folder中,肯定是否全部的档案icon都有以下的绿色勾勾在上面,这样表明您的档案都正确无误的到repository中。

图像:Tsvn_19.png

有时候,由于Windows自己的问题,您可能会看到有些icon没有变成绿色的勾勾。此时,多按F5几回,应该就能够解决这个问题。若是,仍然不行,表示您以前的commit动做真的有问题。请仔细检查以前的commit动做是否正确。

更新档案及目录

为什么须要更新?因为版本控制系统多半都是由许多人共同使用。因此,一样的档案可能还有人会去进行编辑。为了确保您工做目录中的档案与Repository中的档案是同步的。建议您在编辑前都先进行更新的动做。在此,咱们都先假设您已经将档案check out过一次。如今要说明的是如何在一个check out过的目录进行update。在想要更新的档案或目录icon上面按下鼠标右键。而且选择SVN Update。

图像:Tsvn_20.png 图像:Tsvn_21.png

正常的情况下,您能够看到如上的窗口。在这个窗口中会显示有哪些文件更新了。若是没有看到档案更新的相关信息,这表示您的目录中的档案已是最新的,因此无须进行更新。

更新至特定版本

有时咱们须要回溯至特定的日期或是版本,这时就能够利用SVN的Update to revision的功能。在想要更新的档案或目录icon上面按下鼠标右键。而且选择TortoiseSVN->Update to revision。

图像:Tsvn_22.png 图像:Tsvn_23.png

在这个Update窗口中,您能够选择更新到最新版本(HEAD)。也能够选择更新到某个指定的版本(Revision)。固然,您可能早就记不起来正确的版本号码。可能只隐约的记得大概在什么时间。不要紧,按下Show log按钮,您就能够回顾历史了。

图像:Tsvn_24.png

全部您曾经作过的动做,及其日期与对应的版本都会列在这个窗口上面,只要在你想要的版上面点一下,让他变成反白,而后按下OK。这个版本就会自动填入Update窗口中的Revision字段中。您只要再按下一次OK,这个版本就会被取出来到您的硬盘中。

复制档案及目录

不少时候您会但愿有另一个复制的目录来进行新的编修。等到肯定这个分支的修改已经完毕了,再合并到原来的主要开发版本上。举例来讲,咱们目前在working copy下面有以下的目录及档案:

图像:Tsvn_25.png

如今,咱们要为trunk这个目录创建一个branch。假设咱们但愿这个目录是在D:\working\my_prj\branch \my_new_branch_for_testing。首先咱们能够在trunk目录下面的空白处,或是直接在trunk的icon下面按下鼠标右键。

图像:Tsvn_26.png

在选择Branch/Tag…这个项目后,您将会看到以下的对话框出现。

图像:Tsvn_27.png

请先确认From WC at URL: 中的目录是您要复制的来源目录。接着,在To URL中输入您要复制过去的路径。一般咱们会将全部的branch集中在一个目录下面。以上面的例子来讲,branch档案都会集中在branch的子目录下面。在To URL中您只须要输入您要的目录便可。目录不存在时,会由SVN帮您创建。特别须要注意的是SVN由于斜线做为目录分隔字符,而非反斜线。

接着在Log message输入您这次branch的目的为什么。按下OK就能够了。

若是成功,将能够看到下面的画面:

图像:Tsvn_28.png

按下OK就能够关闭这个窗口了。若是您此时马上去working copy的branch子目录下面,您将会失望的发如今该目录下面并无刚刚指定的目录存在。这是由于您working copy的部份仍是旧的,您只须要在branch子目录下面进行SVN update就能够看到这个新增的目录了。新增的目录就与原来的目录无关了。您能够任意对他进行编辑,一直到您确认好全部在branch下面该作的工做都完成后,您能够选择将这个branch merge回原来的trunk目录,或者是保留它在branch中。

要merge回trunk目录中,方法很简单。以上面的例子来讲,咱们在D:\working\my_prj\trunk目录空白处,按下鼠标右键,选择Merge:

图像:Tsvn_29.png

接着能够看到以下的画面:

图像:Tsvn_30.png

这个画面主要分为三个部份,前面的From: 与 To: 是要问您打算从Branch中的哪一个版本到哪一个版本,merge回原来的trunk目录中。所以,From跟To的URL字段应当都是指定原来 branch的目录下。剩下的就是指定要merge的revision范围。以上面的例子而言,咱们从Branch的Revision 7开始merge到Branch下面的最新版本。您能够透过,Dry run按钮,试做一次Merge。这个merge只会显示一些讯息,不会真正的更新到trunk的目录去。只有按下Merge按钮后,才会真正的将 branch的档案与trunk的档案合并起来。

图像:Tsvn_31.png

上面的讯息告诉咱们在trunk目录下面的yyyy.cpp及xxx1.cpp已经被更改过了。若是您在如今到trunk目录下,会看到这两个档案处于被修改的状态。

图像:Tsvn_32.png

若是您确认此次的merge没有问题,您能够直接使用commit来将这两个被修改的档案commit回SVN repository上。若是有问题,您能够直接修改这两个档案,直到确认ok了,再行commit。

图像:Tsvn_33.png 图像:Tsvn_34.png 图像:Tsvn_35.png

一切顺利的话,您就成功的将branch的档案merge回trunk了。

制做Tag或是Release

所谓的Tag或是Release就是一个特别的版本,由于这个版本可能有特别的意义。例如:这个版本是特别的Milestone或是release给客户的版本。其实,Tag与Release的做法与Branch彻底相同。只是Branch可能会须要merge回原来的trunk中,而tag及 release大部分都不须要merge回trunk中。举例来讲,今天咱们的trunk作了一版,这个版本被认定是软件的1.0版。1.0版对于开发来讲是一个很是重要的里程碑。因此咱们要特别为他作一个标记,亦即Tag。假设,这个 1.0版是要正式release给客户或是相关vendor,咱们要能够为他作一个Release的标记。基本上,SVN只有目录的概念,并无什么 Tag的用法。因此您会看到再SVN的选单上面,Branch与Tag是同一个项目。以这个1.0的例子来讲,咱们就是在Trunk上面,按下鼠标右键,选择Branch/Tag的项目:

图像:Tsvn_36.png 图像:Tsvn_37.png 图像:Tsvn_38.png

成功的话,您就在Tag目录下面创建了一个1.0的目录。固然,若是您这时到Tag的目录下面去,会看不到这个目录,您须要在Tag目录下面update一下,才能看到它。

图像:Tsvn_39.png 图像:Tsvn_40.png

制做Release的做法与Tag彻底相同。只是把Tag的目录换成Release而已。

看到这里,相信你们都已经领悟到不管是Branch,Tag或是Release都只是将指定的 Trunk版本复制一份到另一个目录去。至于这个目录要叫Branch仍是叫Release,SVN根本就无论。因此,您也可取其它的目录名称。不过,Branch,Tag及Release已是SVN上面约定成俗的名称。因此,除非您知道本身为什么这样作,不然,最好仍是follow这个命名原则,以避免后面新加入的人看不懂。

NOTE:一样的道理Trunk也只是一个约定成俗的名称。不必定要叫Trunk。只是你们看到Trunk目录就会知道这里面放的是主要的开发主干。

快速参考

前面写了很多废话,主要是给彻底没有版本控制观念的人看的。若是你想直接知道某个功能如何使用,请看下面的章节。

在后面的说明,皆以d:\working看成工做目录。您能够将他换成其它任何您想要的目录。

取得(Checkout)Repository
  1. 开启档案管理员,进入d:
  2. 在档案管理员空白处按下鼠标右键,选择SVN Checkout
  3. 在Checkout对话框中,
    1. URL of repository:repository的位置。
    2. Checkout directory:要存放working copy的地方。
  4. 若d:\working目录不存在,SVN会问您要不要创建这个目录,请选择Yes。
  5. 接着按下OK,便可checkout该目录。

图像:Tsvn_41.png

更新(Update)档案或目录
  1. 在您要由repository更新至working copy的档案或是目录的icon上面按下鼠标右键。选择SVN Update便可。
  2. 若是是要更新至特定的版本,则选择TortoiseSVN->Update to revision。而且在Update对话框中的Revision字段输入您要的版本。也能够透过Show Log按钮来查看版本的信息。
新增(Add)档案或目录
  1. 在尚不属于repository的档案或目录的icon上按下鼠标右键。选择TortoiseSVN->Add。
  2. 选取要新增的档案。
  3. 按下OK。

图像:Tsvn_42.png

NOTE:新增的档案要通过提交(Commit)的动做才回真正的放入Repository中。
提交(Commit)修改过的档案或目录
  1. 在修改过的档案,或是在整个目录的空白处按下鼠标右键。
  2. 勾选真正要提交至Repository的档案或目录。
  3. 输入本次提交的纪录讯息(Message)。这个讯息应该要清楚明了,但不该过份简单。以利往后版本追踪。
  4. 按下OK。

图像:Tsvn_43.png

Copy/Tag/Branch/Release档案或目录
  1. 确认您要处理的档案或是目录已是Repository中最新的版本。
  2. 在要处理的目录或是档案上面按下鼠标右键,选择TortoiseSVN->Branch/Tag。
  3. 在To URL处输入您要的目的地。
    1. branch:要产生一个分支。以区别与trunk不一样的开发。
    2. tag:要造成一个标记,表示重要的milestone。
    3. release:表示一个已经正式的release的纪录。
    4. 其它:进行一个复制(copy)。

图像:Tsvn_44.png

相关文章
相关标签/搜索