SVN合并与分支

一、           分支与合并的概念:

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

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

二、  SVN分支的意义:

简单说,分支就是用于区分开发版本与当前发布版本的。

1、 主干负责新功能的开发

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

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

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

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

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

1、首先要在你的版本库存里创建主干目录,通过版本库浏览器,如图1所示:

2、输入版本库URL地址,如图2所示:

(图 2)

3、进入版本库浏览器主目录,如图3所示:

(图 3)

4、创建主干目录,如图4所示:

(图4)

5、主干目录(trunck),如图5所示:

(图 5)

6、把你要加入版本控制的文件加入主干,如图6-8所示:

(图 6)

(图 7)

(图 8)

7、从主干里检出文件到你的本地工作副本上,如图9-10所示:

(图 9)

(图 10)

8、选择你要创建分支的工作副本,如图11所示:

(图 11)

9、在“至URL”里填写版本库中要存放分支的目录,如图12-13所示:

(图 12)

(图 13)

注意:这时候工作副本对应版本库的路径仍为原来对应的主干的目录。

10、再从分支里检出内容到本地目录上,如图14-15所示:

(图 14)

(图 15)

11、打开刚从分支里检出的工作副本目录,修改里面的test.txt文档并提交,如图16-17所示:

(图 16)

(图 17)

注意:这时提交的修改只会提交到分支上,并不会更改主干上的内容。

12、选择从主干上检出的工作副本,选择合并,如图18所示:

(图 18)

13、选择合并类型(合并类型在文档的最后有专门的介绍),如果19所示:

(图 19)

14、选择合并选项(合并选项在文档最后有专门的介绍),如图20所示:

(图 20)

15、在合并之前,可以先进行测试合并,如图21所示:

(图 21)

16、测试合并成功后,点击“合并”按钮进行合并,如图22所示:

(图 22)

17、合并完成后,打开test.txt文件,这时候可以看见文件的内容跟分支里的内容一样,并且文件上有红色叹号标记(说明已经修改过),如图23所示:

(图 23)

18、在主干上提交修改就完成了合并,如果24所示:

(图 24)

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

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

一、合并一个范围的版本

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

二、复兴合并

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

三、合并两个不同的树

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

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

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

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

实例:

主干A在95版本的时候创建分支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.txt从A删除;

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文件显示新增状态,文件夹test21和test211以及里面的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版本并不会合并到主干中。在以后的合并中,如果选择合并分支的22到24版本,那么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下)里换行是CR和LF(即\r\n或十六进制码0D 0A),而你行中只有CR,所以将要加一个LF(即OA)。说得很明确了,其实LF就是line feed的简写。whitespace包括line feeds, tabs, spaces, and carriage returns。

合并情况:

1.        将分支的最新版本合并到主干。

2.        将分支的某个版本合并到主干

3.        将分支的全部更改合并到主干

svn从分支合并到主干


1、将brunch开发的module 合并到trunk

2、将trunk更新至最新版本,在项目点右键如下图1

3、选择合并类型(复兴分支)如图2

4、选择 brunch 项目svn url 如下图3

working copy指向的目录是本地trunk的版本。

5、将分支(brunch)合并到主干(trunk)版本 如下图4

合并以前可以先 Test merge

6、合并代码过程 如下图5

7、将合并完成的代码提交即可完成。

http://www.360doc.com/content/12/0816/19/1317564_230549494.shtml

时间: 2024-10-05 04:43:17

SVN合并与分支的相关文章

ECLIPSE下SVN的创建分支/合并/切换使用

最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上进行新功能的开发.分支上的bug修改完,发布后,可以合并到主干上.项目程序可以在主干和分支之间进行切换,来实现主干和分支的同时维护. 1.创建分支 创建分支实际上就是将程序copy一份到指定的分支目录,如下图示: 在项目名称上点击右键,弹出菜单,选择"Team",再选择"Branch/Tag",弹出下面的页面: 上图中的"Copy to URL"填写创建新分支的路径地

转 Eclipse下svn的创建分支/合并/切换使用

最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上进行新功能的开发.分支上的bug修改完,发布后,可以合并到主干上.项目程序可以在主干和分支之间进行切换,来实现主干和分支的同时维护.  1.创建分支 创建分支实际上就是将程序copy一份到指定的分支目录,如下图示: 在项目名称上点击右键,弹出菜单,选择“Team”,再选择“Branch/Tag”,弹出下面的页面: 上图中的“Copy to URL”填写创建新分支的路径地址,后面会将程序copy到该目录下,形成新的分支

SVN项目管理:分支库与合并库

上周接到PM大人的新任务,给主库做分支. 首先,先来看下SVN默认的三大文件夹,这三个文件夹建完库之后,一般默认会有,但是以前用的时候,还是比较简陋的,几乎都是大家提交到trunk里面,整个开发流程下来,一直用的是这个库. 那么,这三个文件夹都应该用来放什么东西呢? 分支(Branching) 分支起始的时候是主线的一个拷贝,但是其后他将保持独立性,拥有自己的变化. 有时你需要创建一个分支,例如你需要开发一个新功能,但是你又不希望新功能开 发完成之前影响主线的开发. 标记(Tagging) 标记

SVN 将主干的代码合并到分支上

来源:http://blog.csdn.net/u012701023/article/details/50978154 问题:开发有了项目主干,再次基础上起了一个分支,开发新的功能:因为业务需要,在上个分支还在测试阶段,还没有和主干合并: 但是新的业务又急着开发,又在上个分支的基础上又打了一个分支 这样我们会遇到一个问题 当合并代码的时候会出现很多的冲突,我们需要在主干上修改之前版本的bug  在当前版本上开发新的功能 这样合并代码时候发生冲突是必然的  团队中开发人员比较多 功能开发完毕合并代

SVN使用之分支/标记_合并

首先说下为什么我们需要用到分支-合并.比如项目demo下有两个小组,svn下有一个trunk版.由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作[某个模块],小组2进行新需求的开发.那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版[主干线]的一个copy版,不过分支也是具有版本控制功能的,而且是和主干线相互独立的,当然,到最后我们可以通过[合并]功能,将分支合并到trunk上来,从而最后合并为一个项目. 下面是在eclipse下

把svn中的分支(branch)合并到主分支(trunk)

把svn中的分支(branch)合并到主分支(trunk) 操作步骤 1 branch 和 trunk的代码同步至最新 2 选中trunk项目需要合并的代码(可以项目根目录.也可以是子目录或文件) 3 选择合并操作 ( team-->合并) 4 选择合并一个分支(reintegrate a branch) 5 填写需要合并的分支目录(reintegrate a branch)

SVN合并分支

这篇文章只是介绍的合并分支并未介绍创建分支 1.首先下载主干代码到文件夹: 如图: 2.选中右击     找到"合并"   点击"合并":如图 下文有队这两个按钮的介绍: 3.点击下一步:点击 "..."  选中你要合并的分支地址 在右侧找到你要合并的分支名称  点击确定: 然后点击下一步: 点击测试合并来检测是否有冲突 没有冲突直接点击合并即可合并到主干 合并完成后就可以在主干上看到你分支修改的代码, 在主干点击提交可以完成合并了, 不过在合并

SVN合并代码之二:将分支2个版本之间的代码合并到主干

背景:几个月前由于开发需要,从主干新建了分支,现在开发完成且在单独的测试环境测试通过且分支代码已合并到主干,同时另外一同事也以我们的分支修改了代码,在我们将分支代码合并到主干后,他的代码才提交分支,此时他想将他提交到分支的代码合并到主干. 操作步骤如下: 1.首先,获取他提交分支前分支的版本号(设为版本号A)和提交分支后分支的版本号(设为版本号B).获取分支版本号的方式是选中项目-右键-Team-显示资源历史记录. 2.合并代码: 选中需要合并代码的文件夹,也可以选中整个项目,右键-Team-合

SVN合并(merge)的使用

使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚了解,这才是硬伤. 分支用来维护独立的开发支线,在一些阶段,你可能需要将分支上的修改合并到最新版本,或者将最新版本的修改合并到分支. 此操作十分重要,在团队开发中,如果你是SVN 的维护者此环节可以说是必不可少,因为团队开发中如果使用了分支,那样合并分支到主干.或者分支合并分支的操作是必须