`

SVN 分支与合并详解

阅读更多

SVN 分支与合并 详解

 

一、分支与合并的概念:

 

分支:

      版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线)。主要用来做BUG修改,功能修改。修改时也不影响主干的进度。

 

合并:

      分支用来维护独立的开发支线,在一些阶段,你可能需要将分支上的修改合并到最新版本,或者将最新版本的修改合并到分支。

 

二、  SVN分支的意义:

 

简单说,分支就是用于在不影响主干开发时,同时修改已开发的功能。

  例如:版本2.0已经开发好了,测试也通过了,准备做tag发布时,发现还有有些功能不太合理,需要修改,然而现在版本3.0已处于开发阶段,现在分支的作用就出来,我们要在版本2.0上做个分支,在这个分支上做修改,修改后再看情况是否需要合并到主干。

 

   1 主干负责新功能的开发

    2.、分支负责修正当前发布版本的bug(对于可以放入下个发布版本的改进性bug可以直接在主干上开发,但不推荐)

    3.、分支上修改的bug,经常性merge到主干上,尽量及时merge(避免大面积红色区域)。

    4.、只能分支往主干靠拢(merge),不能反向!

5.、直到下个新版本发布,该分支停止修改

 

三、  如何创建分支与合并分支:

    

     详情请下载附件~~~

 

 

svn分支合并类型和深度的理解:

合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里。如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分支的,则合并范围是主干上的改动,并且一定要注意,合并的起始位置URL一定要和当前的工作副本的URL是相同的。

一、合并一个范围的版本

此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。

二、复兴合并

复兴合并可以理解为是第一种合并类型的一种特例,在复兴合并中,主干可以理解为是自从开创分支之后没有任何修改,而分支是经过修改的,而且合并中分支是没有版本选择的。经过复兴合并,分支中所有的修改都会合并到主干中,合并的结果将使得分支和主干一模一样,从而可以删除分支。

三、合并两个不同的树

此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;第二种类型是主干和分支都不能选择合并的版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。

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

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

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

实例:

主干A95版本的时候创建分支B,此时两棵树都是95版本

1 我在分支B上增加文件test.txt,提交。此时版本库升级到了96版本;

2 我在A上选择合并类型1,合并分支最新版本,结果是把test.txt加入A

3 我在A上选择合并类型2,合并分支最新版本,结果同上;

4 我在A上选择合并类型3,合并分支最新版本,结果同上;

5 我在A上增加文件test2.txt,提交,此时版本库升级到了97版本;

6 我在A上选择合并类型1,合并分支最新版本,结果是把test.txt加入A

7 我在A上选择合并类型2,合并分支最新版本,结果是把test.txt加入A

8 我在A上选择合并类型3,主干选择当前97版本,合并分支最新版本,结果是把test.txt加入A,把test2.txtA删除;

9 我在A上选择合并类型3,主干97以前的版本,合并分支最新版本,结果是把test.txt加入A,而A中保留着test2.txt

将分支合并到主干上,首先需要在主干的工作副本下进行,合并的范围是从主干的上次合并的版本开始到分支上最新的版本结束,如果是第一次合并,则从主干创建分支的版本开始,所以每次合并要做好说明,在日志中体现,不然忘记了下次再合并就有点麻烦。其实,应当尽量避免一个分支合并多次,分支的作用一般为了解决bug,一旦bug对应结束了,分支的使命就结束了,以后再出现其他的问题,应当重新建立分支,这样就不会出现多次合并的问题了。

 

分支的合并深度

合并深度:

一、工作副本:即你当前的工作目录,一般默认为这个选项;

二、全递归:即你选择的目录的版本库,包括了其下面的子文件,子文件夹,包括子文件夹里面的内容;

三、直接子节点,包括文件夹:即你选择的目录下面的文件,文件夹,但是不包括文件夹里面的子文件,子文件夹;

四、仅文件子节点:即你选择的目录下面的文件,但不包括文件夹,当然不包括的文件夹下面的所有内容也都不纳入合并范围;

五、仅此项:没有任何合并内容。

实例:

1、主干test文件夹下面有text.txt文件,test文件夹创建分支test2

2、在test2文件夹下面增加test21文件夹,在test21文件夹下面增加文件夹test211,在test211文件夹下面增加文件test211.txt;修改test2文件夹下面的文件test.txt,增加文件test2.txt。提交

3、右键test文件夹合并test2文件夹,选择工作副本。则test文件夹中原先的test.txt文件则显示修改状态,test2.txt文件显示新增状态,文件夹test21test211以及里面的test211.txt文件都显示为新增状态。选择将test文件夹svn还原,则新增状态下的文件夹或者文件显示为无版本控制状态,原先的test.txt还原为常规常态。

4、右键test文件夹合并test2文件夹,选择全递归,结果和3一样。但是我们之前的test文件夹和仓库上的test的内容是一致的,如果不一致,那么选全递归,是已仓库版本为标准。选工作副本,顾名思义,则以你本地的工作副本文件为主,分支上有而工作副本中没有的文件夹或文件则不进行比较合并。

5、右键test文件夹合并test2文件夹,选择直接子节点,包含文件夹。则test文件夹中原先的test.txt文件显示为修改状态,test2.txt文件显示为新增状态,test21文件夹显示为新增状态,但是其里面内容则为空,那么就证明了分支中test21文件夹以下的内容并没有合并到主干test中来,合并行为只是选取了当前目录。选择将test文件夹svn还原,则新增状态下的文件夹或者文件显示为无版本控制状态,原先的test.txt还原为常规状态。

6、右键test文件夹合并test2文件夹,选择仅文件子节点。则test文件夹中原先的test.txt文件显示为修改状态,test2.txt文件显示为新增状态,分支test2中的test21文件夹没有合并到test中来。选择将test文件夹svn还原,则新增状态下的文件显示为无版本控制状态,原先的test.txt还原为常规状态。

7、右键test文件夹合并test2文件夹,选择仅此项。则test文件夹显示为修改状态,但是内容没有任何改动。将test文件夹svn还原,则该文件夹显示为常规状态。

只记录合并(阻止这些版本将来被合并)

选择此项意味着并没有实际的合并动作,只是在将来的合并过程中,svn将过滤掉此版本的修改动作。例如,我在合并的过程中,选择对分支的23版本只记录合并(阻止这个版本将来被合并),那么23版本并不会合并到主干中。在以后的合并中,如果选择合并分支的2224版本,那么23版本将被忽略,我们也可以看到,在选择版本的对话框上,23版本的字体是灰色的。所以要慎重使用这个选项,一旦使用了,那么表示这个版本在以后的合并中就不能再使用了。

忽略祖先:如果在分支上有一个文件曾经被删除过,后来又加了一个同文件名的文件,那么在merge的时候svn会识别到这两个文件不是同一个祖先而直接覆盖旧文件增加新文件。而实际上我是要对这两个不同祖先的文件进行合并的,这个时候就需要使用svn merge --ignore-ancestry 忽略祖先来进行合并才能保证正确。

实例:

1 将主干test创建分支test1

2 test1文件夹下的test.txt文件删除,提交;

3 test1下创建文件test.txt,提交;

4 test1合并到主干test,如果默认选择,则提示将test1中的test.txt文件替换test文件夹中的test.txt文件;如果选择了忽略祖先,那么系统将把两个test.txt作比较,必要时提示冲突。

carriage return是一个符号(指回车符号CR),而一般在代码文件或文体文件里(WINDOWS下)里换行是CRLF(即\r\n或十六进制码0D 0A),而你行中只有CR,所以将要加一个LF(即OA)。说得很明确了,其实LF就是line feed的简写。whitespace包括line feeds, tabs, spaces, and carriage returns

 

 

===============================================================

 

最后附上总结:

1.分支(branche)的创建。
  1、分支创建是建立在主干上的。
  2、创建分支前将整个porject_name检出到本地,然后主干(trunk) 。
  3、右键 选择 分支/标记 。
  4、然后,在至路径输入:/branches/分支版本名称。
  5、最后选择需要分支版本,点确认,这样分支就建立成功了。
  6、再update porject_name就能在branches中看到,刚刚创建的分支版本。
  7、当然如果要最该分支做修改,就要重新检出了:http://localhost/svn/porject_name/branches/分支版本名称
 
 
2.分支的合并
  1、分支合并当然也是在主干上操作的。
  2、修改完成后,检出整个porject_name到本地,选择主干(trunk)
  3、右键 选择 合并(合并类型这里就不简介了文档中有详细介绍),选择第一个,
  4、然后在合并源ULR中 选择需要合并的分支不版本URL,最后在范围写上需要合并的版本号(可以多个),
  5、再下一步进行合并。
  6、合并完成后,注意 主干(trunk) 是需要提交的,当然也有可能出现冲突。

3.标记(tags)的创建
  标记的创建跟分支的差不多,但,标记是不能修改的,具体为什么请看文档,
  设置标记目录权限时要设置成只读(当然除开标记创建者咯)。

4.分支(branche)的删除
  删除跟删除其他目录是一样的操作。

 

分享到:
评论

相关推荐

    SVN使用的分支与合并

    SVN 分支与合并详解 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和其他需要版本控制的领域。在软件开发过程中,SVN 的分支与合并功能是非常重要的,下面我们将详细介绍 SVN 中的分支...

    SVN创建、合并与切换分支操作详解

    以下是对SVN创建、合并和切换分支操作的详细解释: ### SVN目录结构 1. **trunk**:这是主开发分支,通常存放项目的主线开发代码。日常开发工作在此分支上进行,确保最新的稳定代码在这里。 2. **branches**:分支...

    SVN分支与合并

    SVN分支与合并,从创建分支到合并分支,步骤图文详解

    SVN分支及合并使用文档.doc

    《SVN分支及合并使用详解》 版本控制系统Subversion(SVN)是软件开发中不可或缺的工具,尤其在团队协作中,分支与合并是其核心功能。本文将深入解析SVN的分支创建、管理和合并过程,帮助开发者更好地理解和运用这...

    svn 合并、冲突及常用功能详解

    `svn merge`是Subversion(简称svn)中的关键命令,用于将一个分支或标记的修改合并到另一个分支。在版本控制系统中,合并是协同开发的核心操作,它允许团队成员同步各自的工作,避免代码冲突。以下是一些关于`svn ...

    用SVN分支管理多版本

    ### SVN分支管理多版本知识点详解 #### 一、引言 在软件开发过程中,随着项目的迭代更新,如何高效地管理不同版本之间的代码成为了项目管理中的一个重要环节。Subversion(简称SVN)作为一款广泛使用的版本控制...

    svn分支管理

    "svn分支管理详解" svn分支管理是版本控制系统中的一种常用技术,用于管理项目的不同版本和变更。通过创建分支,可以让开发者在不影响主干的同时,进行新功能的开发和测试。在本文中,我们将详细介绍svn分支管理的...

    SVN分支合并经验总结

    ### SVN分支合并经验总结 在软件开发过程中,版本控制系统如Subversion(SVN)是团队协作不可或缺的工具。其中,分支管理和合并策略是确保代码质量和维护项目稳定性的重要环节。本文将深入探讨在SVN中进行分支合并...

    SVN中的Branches分支以及Tags标签详解与应用举例

    SVN 中的 Branches 分支以及 Tags 标签详解与应用举例 SVN(Subversion)是一款版本控制系统,广泛应用于软件开发中。它可以帮助开发者管理和控制代码的版本。SVN 中有两个重要的概念:Branches 分支和 Tags 标签。...

    07-SVN自调用记录情况_LabVIEW程序分支与合并.docx

    ### SVN在LabVIEW开发中的应用:分支与合并详解 #### SVN简介与LabVIEW集成 版本控制系统(Version Control System,简称VCS)是软件开发中不可或缺的一部分,它帮助开发者管理源代码的变化历史,使得团队协作更加...

    svn代码合并步骤

    ### SVN代码合并步骤详解 #### 一、合并方向的重要性 在进行代码合并之前,明确合并的方向至关重要。合并的方向决定了哪些代码会被更新,并且会影响到合并后的代码库的状态。常见的合并方向有以下几种: - **分支...

    SVN创建合并分支.docx

    ### SVN 创建与合并分支详解 #### 一、版本控制方案概述 版本控制系统是软件开发过程中不可或缺的一部分,它帮助团队管理代码的变化历史,确保项目的稳定性和可维护性。Subversion(简称SVN)作为一款集中式的版本...

    SVN主干和分支操作

    - 可以选择从主干合并到分支、从分支合并到主干等不同操作。 - 根据需求选择合并选项,点击“OK”后会显示差异列表供用户确认。 #### 四、实践总结 通过上述步骤,我们可以有效地利用 SVN 进行项目的版本管理和...

    Subversion分支与合并

    **Subversion 分支与合并详解** Subversion(简称SVN)是一种版本控制系统,它用于管理对源代码等文件的修改历史,便于团队协作和代码管理。在这个系统中,分支和合并是两个至关重要的概念,它们在多用户协作环境中...

    SVN安装与使用详解

    - 合并(Merge):处理多人协作时的冲突,合并不同分支的修改。 - 解决冲突:当多人修改同一文件导致冲突时,TortoiseSVN会标记冲突文件,需要手动解决并提交结果。 三、SVN日常维护与管理员使用 1. 版本控制 SVN...

    SVN版本管理详解-08210246.pdf

    SVN包含了一系列的命令行工具,以及可能的图形用户界面(GUI),用于执行各种操作,例如初始化版本库、检出文件、提交更新、分支与合并以及版本库的维护等。 在SVN的基本概念中,版本模型是核心,它定义了数据是...

Global site tag (gtag.js) - Google Analytics