svn trunkmerge到一个branch上

merge后如果有不需要的文件被修改了,就单独把那个文件revert

如果有冲突的,可以手动改一改


下面的文章试验过,work。

也学习到一点如果是同一个分支不同版本比较可以用 -r  1:2

如果不同分支的比较就用: svn merge proj/branches/proj_branch_1@101 proj/branches/proj_branch_1 .  //路径然后@后面是版本号。


http://blog.csdn.net/yuleslie/article/details/7674630


版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
svn 的 merge其实很好用,当然前提是你明白了svn merge这个命令,还好,我用了大约一年明白了这个命令 -___-!!


跟大家说一下用法,比如我们要把分支merge到主干上


# svn merge --help
merge: Apply the differences between two sources to a working copy path.
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
       3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]


我们以第一个为例
merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
这个help里面提示,merge需要三个参数
sourceURL1,sourceURL2的含义并不是两个分支,或者一个分支一个主干,而是同一个分支的两个状态,或者说是两个版本。对这两个版本做一个diff,然后把diff的结果,应用到最后的参数WCPATH上,WCPATH代表是一个本地已经checkout的工作区


svn merge的思想是diff and apply


比如,我开发一个项目叫做proj
目录结构是
proj/trunk
proj/branches
proj/tags


(省略了http:// 之后的,只是相对路径,但是真正使用时候不能省略)


当版本达到100的时候,我决定做一个branch进行一些其他开发
 [Reversion:100]
 $svn cp proj/trunk proj/branches/proj_branch_1
 OK Reversion:101


然后,trunk和proj_branch_1都在开发,到了某一个版本,比如150,branch开发完成,需要merge回到trunk
此时的目录结构是
[Reversion:150]
proj/trunk
proj/branches/proj_branch_1
proj/tags


按照svn的实现,我需要知道proj_branch_1所做的所有的变化,也就是当前的状态对刚刚生成时候状态的变化。根据这个变化生成一个diff文件,在apply一个本地的工作区上。(建议是一个干净的本地trunk工作区)


那么执行
$cd proj/trunk
$svn merge proj/branches/proj_branch_1@101 proj/branches/proj_branch_1 .


其实,第一个URL(我们称之为左边),为起始状态,通过最后的@101,表示取版本101,这个101就是cp成功之后的那个版本。第二个URL(我们称之为右边),为最终状态,取最新的,
 左边和右边做了一个diff,应用到当前工作区目录,也就是trunk。
 此时
 $svn st就可以看到变化了


这里的一个问题是如何获取这个cp之后的版本,也就是例子中的101
可以使用svn log里面的--stop-on-copy命令
$svn log --stop-on-copy proj/branches/proj_branch_1
会到cp的时候停下来,那里边标注的版本就是需要的版本


 比如,这是一个真正项目的一个例子,
 ------------------------------------------------------------------------
 r995 | yinweiming | 2007-10-24 09:07:08 +0800 (三, 24 10月 2007) | 1 line


 Create a branch for proj client using
 ------------------------------------------------------------------------
 其中的r995,995就是我需要的版本
 (说明一下,commit时候写commet的好处,比如这里我就很明确的肯定这是branch的起始点)


对于svn merge的另外的用法也是类似,只要是明白了
他是根据左边,右边生成diff,然后应用到本地的一个工作区就容易理解了。


还有可以使用svn merge --dry-run来模拟假装merge一下,看一下merge会发生什么,而不是真正的做这个动作。




而对于merge的help里面的 3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]
这个也很容易理解,就是取 SOURCE 这个东西,版本N,M之间的区别,作用在WCPATH这个本地工作区上


注意!
做branch千万别根据本地修改过的工作区做,一定基于某一个URL的版本做
我就吃过这个亏

diff的时候,diff不出来,因为基于本地工作区的,所以现在merge起来很是费劲


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值