TortoiseSVN学习--标签、分支及分支的新建、合并

一、正确的SVN项目仓库结构

很多项目人员往往在创建项目仓库以后,直接将整个项目的源代码提交到仓库的根目录,这往往是由于对SVN没有系统的了解。

引用《版本控制之道》书里的图片,正确的项目仓库目录结构如下图:
在这里插入图片描述在根目录下首先建立三个目录:

  • trunk:又称为主干,这个子目录才是应该将项目源代码提交到的位置。
    trunk目录代表着开发的主线,大部分的开发工作涉及到的更新、提交都在这个目录里,就跟“原始”的SVN使用一样。

  • branches:这个目录就是分支目录,所有新建的分支都应放在这个目录。
    每一个branches下的分支代表了一条并行的开发过程,如果不明白可以继续往后看。

  • tags:这个目录是标签目录,所有建立的标签都应放在tags目录下。
    每一个tags下的标签代表了一个项目的时间节点,或者说是事件、里程碑。

在SVN服务器新建仓库(Repository)时,选择Single-project repository,
在这里插入图片描述
可自动创建以上三个文件夹。
在这里插入图片描述

二、分支和标签

什么是分支
分支的基本概念:一条基于另外一条开发线存在的分支,并共享在分离之前的日志,一个分支就象一个拷贝的存在,并从那里离开,并具有自己的历史。我的解释是分支相当于对于开发中的主干进行了复制,从此在分支上后续的所有操作与主干上的所有操作互不影响。
什么是标签
标签和分支的本质是一样的。
标签用来记录项目中的事件或里程碑,可以让你给项目中的事件起一个名字,比如发布2.0.0版本,以后你可以使用这个名字来签出它。
标签和分支对比
你可以在分支上进行并行开发,而不应该修改标签里的内容,标签仅应当作为一份代码的快照

三 新建分支

在之前,我们在服务器上建立一个StandardRepository,其根目录下包含了三个空目录:trunks、tags、branches,我们将其检出到本地:
在这里插入图片描述
为了方便说明,我们在trunk文件夹下新建两个文本文件:A.txt,B.txt
在这里插入图片描述
A.txt中输入:A File: Version 1.0
B.txt中输入:B File: Version 1.0
保存后提交到SVN服务器。

创建分支

  1. 在trunk上点击右键,玄真TortoiseSVN->分支/标签(Branch/Tag);
  2. 在“至路径(To path)”输入框中输入新建分支的路径,一般是:/branches/分支名,也就是相当于分支保存的路径名,这里我们输入/branches/b01;
  3. 在下面选择“版本库中的最新版本(HEAD revision in the repository)”,为当前SVN中trunks目录下最新的代码建立分支,如果需要为指定版本建立分支,可以进行选择;
  4. 点击确定,分支创建完成,并给出相关提示。
    在这里插入图片描述注:勾选“切换工作副本至新分支/标记”后,当前的工作分支会切换到新建的分支上
    在这里插入图片描述
    这时,我们打开本地的branches目录,发现目录依然为空,没有方才建立的分支,这是因为分支建立的操作是在服务器端完成的,当需要编辑分支时,在branches目录点击SVN更新,我们可以发现刚才建立的分支b01已经下载下来了。
    在这里插入图片描述

四、 合并分支

我们模拟一下主干、分支并行开发的情况。
基础版本:对应版本分支图2,5
在这里插入图片描述
分支:打开branches/b01下的A.txt,对其进行编辑保存,提交,对应版本号6;
在这里插入图片描述
主干:打开trunk下的A.txt,对其进行编辑并保存,提交,对应版本号7;
在这里插入图片描述

注:提交的时候要注意“提交至”的路径,看清是提交到branches下,还是trunk下;不同的分支之间,我们可以通过右键TortoiseSVN->切换,来选择对应的提交分支;

我们在trunk文件夹右键,选择TortoiseSVN->版本分支图,可以看到:
在这里插入图片描述
在Branch和Trunk并行开发过程中,进行合并操作有两种类型:

  1. 将主干trunk中的修改合并到branch中;
  2. 将branch最后合并会trunk;

4.1 主干Trunk的修改合并到Branch中

第1步,在branches/B01文件夹上右键,选择TortoiseSVN->合并(Merge);

第2步,在弹出的对话框中选择第一项:合并一个版本范围;
在这里插入图片描述第3步,点击下一步,这里的“合并的源(URL to merge from)”填Trunk的路径,理解为从主干合并到分支,“将要合并的修改范围”就是要将trunk的哪些版本所对应的变化合并到branch中,确认工作副本的路径为B01分支的路径。
在这里插入图片描述
第4步,点击下一步
在这里插入图片描述
第5步,点击合并,提示代码冲突
在这里插入图片描述第6步,选择“编辑”,出现合并工具界面,解决好冲突后,灰色的“Mark as resolved”变成蓝色,点击“Mark as resolved”。这时,我们进入本地Branches/B01中的A.txt处于已修改的状态了。 至此,branch 已经完全和 trunk 同步,合并发生在本地 working copy,只要你不提交就不会影响到 repository。

4.2 分支合并到主干

和4.1步骤相同,需要注意的是:
第1步中,需要在trunk上右键;
第3步中,合并源应为待合并分支的路径;

4.3 分支合并类型

在合并的第2步中,工具给出了两种合并类型的选择:

  • 合并一个版本范围;
  • 合并两个不同的树;

合并一个版本范围

此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
合并两个不同的树
此类型与前一种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。

起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)

结束URL:选择要合并的分支的URL。

起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。

举例说明:
在这里插入图片描述
如上图中主干在2.0版本是创建一个分支,然后两者进行并行开发,主干当前最新版本为5.0,分支当前最新版本为2.3;现在需要将分支合并的主干上,那么

  • 如果采用“合并一个版本范围选项”的话,合并源选择分支,可选择分支版本2.1、2.2、2.3或某几个版本的修改进行合并,主干版本将从2.0开始,合并所有的修改;如分支选择2.2,那么将合并主干2.0,3.0,4.0,5.0和分支2.1,2.2的所有修改;
  • 如果采用“合并两个不同的树”,起始源选择主干,版本可选择2.0,3.0,4.0,5.0或某几个版本的修改进行合并,结束源选择要合并的分支,版本可选择2.1、2.2、2.3或某几个版本的修改进行合并;如分支选择2.2,主干选择4.0,那么将合并主干4.0,5.0和分支2.1,2.2上进行的所有修改;
发布了47 篇原创文章 · 获赞 63 · 访问量 33万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章