简要理解svn merge的几种用法

http://blog.csdn.net/imanapple/article/details/44563881
前言:做海外版本的时候,有些修改要同步之前的旧版本上制作,所以有很多svn revsion需要去合并
最后还是用bat解决吧,-c 参数指定需合并版本

版本管理中有一个很重要的概念,就是主干和分支。对应于主干和分支之间代码的合并操作,就会用到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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

我们逐个进行介绍

1. merge SOURCE[@REV] [TARGET_WCPATH]

merge的第一种用法,就是最基本的合并方式。

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

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

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

上张图片来说明一下文件夹的合并方式
这里写图片描述

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

2. 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可以指定多个,所以它称为摘樱桃,就是选某些版本(樱桃)进行操作(来摘)。

3. merge –reintegrate SOURCE[@REV] [TARGET_WCPATH]

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

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

4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]

the ‘2-URL’ merge,双URL的合并。

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

  1. diff SOURCE1[@N] SOURCE2[@M] ,对比这两个URL的区别,假设为diff1
  2. 将有区别的内容diff1,合并到TARGET_WCPATH

以上就是几种merge的用法介绍,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值