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

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

转载于:https://www.cnblogs.com/woaixingxing/p/11076051.html

(转) 对svn分支合并类型和深度的理解相关推荐

  1. svn分支合并到主干可能出现异常信息

    svn分支合并到主干时遇到的问题汇总: 一.在主干上右键Team -->合并(merge ) 二.提供选项:Merge Input     Merge a range of revisions ...

  2. SVN分支/合并原理及最佳实践

    #SVN分支/合并原理及最佳实践 SVN是一种常用的版本控制工具,一种典型的项目代码实践方式是: 存在一个代码基线(Base Line)或称主干,不同的模块使用各自的分支进行功能开发,在开发完毕后合并 ...

  3. eclipse中SVN分支合并到主干(记录)

    2019独角兽企业重金招聘Python工程师标准>>> eclipse中SVN分支合并到主干(记录) 一.从分支合并到主干 被操作对象: 主干From : 主干的 打出分支时的版本( ...

  4. svn 分支合并(Subclipse例子)

    http://my.oschina.net/wenic705/blog/40825 本次记录非常简单,高手不要喷我,要是有好的应用经验也别藏起,技术发展就靠你了.(亲,看着不错给好评哦.) svn的分 ...

  5. SVN 分支/合并/切换

    本文无条理性,仅作自我参考. 花费了两个半下午,走马观花的看了一下说明文档,SVN设计的太复杂,对我这样的,不在一个集体的的业余开发者,要理解起来真是太难了.... 分支 Make branches ...

  6. 图文:eclipse中SVN分支合并到主干

    在项目开发中,需要添加一些新的功能,但是又不想影响到其他开发人员的项目进度,所以决定使用SVN分支进行开发,分支开发完毕后再合并到主干.本文介绍如何在eclipse中合并分支到主干. (http:// ...

  7. svn 分支 合并

    笔记背景: 14年,公司自研引擎项目,还在使用svn作为版本管理的时候,忘记原文地址是什么了.. 尽管svn没有作强制要求,但是一般svn版本库目录建议创建trunk.branches和tags三个目 ...

  8. SVN分支与合并【超详细的图文教程】(转载)

    SVN分支与合并 一. 分支与合并的概念 二. SVN分支的意义 三. 如何创建分支与合并分支 一.分支与合并的概念: 分支:版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上.这 ...

  9. IDEA使用svn进行代码分支合并

    svn基础这里就做说明了,只简单说明一下IDEA下svn分支合并的操作 首先打开IDEA下的svn操作界面如图 按步骤点击后会出下如下界面,第一次进入没有配置分支路径是没有红框里面的选项的 那么就点击 ...

最新文章

  1. 为了解决伴随RIP协议的路由环路问题,可以采用水平分割法,这种方法的核心是(22),而反向毒化方法则是(23)。
  2. 破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
  3. Shell脚本使用常见问题说明
  4. .NET框架程序设计--Globally Deployment Assembly全局部署程序集
  5. putty连接Linux
  6. windows 下查看进程占用
  7. leetcode 179 python
  8. qc成果报告范例_株洲水务集团QC成果再获省一等奖
  9. The peopleware papers
  10. 腾讯2020校园招聘后台开发面试编程题
  11. 微信hash ajax,基于vue hash模式微信分享#号的解决
  12. RAD与non-RAD
  13. sourceMap到底是个啥玩意?
  14. 百度知心搜索–基于深度数据瓦解和用户行为分析的搜索引擎
  15. js移动端文字提示框
  16. Qt:使用版本控制系统
  17. Unity3D UI多元素布局
  18. QT5 隐藏系统标题栏,自己编写个性靓丽标题栏
  19. 爆笑课堂:程序员看得懂的搞笑段子
  20. 那些酷炫的AI前沿应用 |〖医疗〗听声音辨新冠感染;〖农业〗除草机器人;〖救援〗无人机海上搜救;〖运动〗拳击比赛裁判;〖环保〗从废品中分拣可回收材料;〖招聘〗TaTiO招聘平台…

热门文章

  1. Waiting for table metadata lock
  2. Java+大数据开发——Hadoop集群环境搭建(二)
  3. 静默安装oracle11.2.0.4
  4. zabbix的安装监控windows,linux操作流程
  5. SSL 的 java 实现
  6. 八个程序员必备的代码编辑器(附下载链接)
  7. Github上36893颗星!这个被称为下一代企业级应用首选技术你学了么?
  8. 计算机组成原理第4章,计算机组成原理-第4章总结.doc
  9. 怎么写脚本_直播脚本怎么写|请收下这份攻略
  10. zookeeper的名词复盘-集群角色