svn git 代码管理工具之一 - svn四种常见合并

版本管理中有一个很重要的概念,就是主干和分支。对应于主干和分支之间代码的合并操作,就会用到svn merge。

svn提供了4种不同形式的merge方法,分别如下:

  1. merge SOURCE[@REV] [TARGET_WCPATH]
    (the ‘sync’ merge) 同步合并
  2. merge [-c M[,N…] | -r N:M …] SOURCE[@REV] [TARGET_WCPATH]
    (the ‘cherry-pick’ merge) 摘选合并
  3. merge –reintegrate SOURCE[@REV] [TARGET_WCPATH]
    (the ‘reintegrate’ merge) 归源合并
  4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]
    (the ‘2-URL’ merge) 双URL合并

我们逐个进行介绍

  1. merge SOURCE[@REV] [TARGET_WCPATH]
    merge的第一种用法,就是最基本的合并方式。

首先从字面上解释一下,source指需要合并的代码源,TARGET_WCPATH指目标工作区间,这条命令的意思是把source的内容合并到TARGET_WCPATH。

再来解释一下merge的过程。在合并的过程中,svn会对两个路径下的文件夹、文件进行对比。

从根目录开始,source中的文件夹如果中TARGET_WCPATH找不到同名文件夹,则直接复制到TARGET_WCPATH;
如果找到同名文件夹,则文件夹内再依次深层比对,同名的再比对,不同名的复制,直到没有文件夹可以比对;
对于文件来说,文本文件会对文本内容进行合并;而非文本文件比如png、exe、gif等等,会产生冲突

注意命令中[]中括号中的内容,代表可以省略。
我们将这条命令省略为merge SOURCE[@REV],也就是说source可以合并代码到source。 @REV是Peg Revision,它用于定位某些被删除又重新建立的文件。具体可以参考http://svnbook.red-bean.com/en/1.1/ch07s03.html,这里不详述。

  1. merge [-c M[,N…] | -r N:M …] SOURCE[@REV] [TARGET_WCPATH]
    第二种合并文档描述为cherry-pick(摘樱桃),我翻译为 摘选合并。它可以指定source的某些版本区间,在这些区间内的代码变更才进行合并。

-r 100:200 指source的版本100到200之间的代码。
-c可以算作-r的特殊用法,-c 200 等价于 -r 199:200,它指对比某个临近版本的代码变更。

在这个命令中,-c -r可以指定多个,所以它称为摘樱桃,就是选某些版本(樱桃)进行操作(来摘)。

  1. merge –reintegrate SOURCE[@REV] [TARGET_WCPATH]
    第三种合并,我翻译为 归源合并。
    它要求source是从TARGET_WCPATH中拷贝创建的,然后在某个版本将所有代码变更合并回TARGET_WCPATH。
    在这次合并后,source的新的修改无法再向TARGET_WCPATH合并,也就是一次性的回到源头的合并。简直像是个魔法啊,哈哈

这里起到关键作用的就是–reintegrate选项。
另外注意,在归源合并中,不能指定版本区间-r或-c。

  1. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]
    the ‘2-URL’ merge,双URL的合并。

这个可以分为两部分进行理解:

diff SOURCE1[@N] SOURCE2[@M] ,对比这两个URL的区别,假设为diff1
将有区别的内容diff1,合并到TARGET_WCPATH
以上就是几种merge的用法介绍,

PS :实际上,对于svn来说并不存在主干和分支这样的模块,这是一个便于理解的虚拟概念,使大家中版本管理上有共同的描述形式。实际在使用merge时,只要是从一个工作区间到另一个工作区间,都可以进行合并操作。

在实际操作merge时,svn会对比需要merge的source和target的版本号,所以要注意一下版本号的情况。有的时候一直commit代码,但是没有update过,你的本地版本号是不会变的,直接合并就会有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值