博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:SVN分支合并
阅读量:6235 次
发布时间:2019-06-22

本文共 2560 字,大约阅读时间需要 8 分钟。

Subversion的分支通常用于在主干程序之外,对程序进行修改。这样 可以在不扰乱主干程序进行的开发、测试、发布流程之外,尝试一下新功能的研究、修改。如果觉得新功能没问题,可以将分支合并到主干程序中。

合并前,需要将分支提交(Commit),由此看来,合并操作好象是在服务端和本地客户端同时进行的操作。
合并时,要从主干的working copy的右键菜单开始,"From" Url是合并的目的地,需选择主干的url,"To"是合并的来源,需选择分支的url。

svn 的 merge其实很好用,当然前提是你明白了svn merge这个命令,还好,我用了大约一年明白了这个命令 -___-!!

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

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

我们以第一个为例:

svn 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_1OK 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所做的所有的变化,也就是分支当前的状态相对刚刚生成的时候(svn cp时)状态的变化,根据这个变化生成一个diff文件,再apply一个本地的工作区上。(建议是一个干净的本地trunk工作区)

那么执行:

$cd proj/trunk$svn merge proj/branches/proj_branch_1@101 proj/branches/proj_branch_1 .

其实,第一个URL(我们称之为左边),为起始状态,通过最后的@101, 表示取版本101,

这个101就是svn 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 | lgh | 2010-07-19 09:25:10 +0800 (一, 19 07月 2010) | 1 line

Create a branch for proj client using

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

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

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

而对于 merge的help里面的

3. svn merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]

这个也很容易理 解,就是取 SOURCE 这个东西,版本N,M之间的区别,作用在WCPATH这个本地工作区上

注意!

做 branch千万别根据本地修改过的工作区做,一定基于某一个URL的版本做,diff的时候,diff不出来,因为基于本地工作区的,所以现在merge起来很是费劲。

转载于:https://www.cnblogs.com/code-style/archive/2012/09/20/2695753.html

你可能感兴趣的文章
如何防止rogue server破坏数据中心
查看>>
首席信息官面临的三个云计算咒语
查看>>
恶意网站可利用这个新漏洞拖垮Windows 7和Windows 8电脑
查看>>
达沃时代梁力明:超融合已实现开箱即用
查看>>
选择单一厂商作为安全提供商的策略靠谱吗?
查看>>
混合云计算和联合云计算
查看>>
虚拟现实VR遇上云计算 将是怎样的情缘
查看>>
中国网络版银联将亮相,IBM将推最大规模区块链项目
查看>>
用什么样的姿势能拿到国际“AV”大赛的冠军?
查看>>
怎样高清录制本地会议和实现远程共享
查看>>
资本垂涎社区大数据 居住后市场价值重估
查看>>
工信部指导的首个区块链标准发布,将从四方面推动区块链产业化进程
查看>>
《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一3.8 致谢...
查看>>
LG推出超小型率传感器模组,精度媲美专业设备
查看>>
Pure Storage公司将其FlashArray的未来命运押在NVMe身上
查看>>
新ICT时代,商业与网络连接的需求变革
查看>>
物理Hacking之通过摄影收集情报
查看>>
Pivot3推面向SMB和ROBO的超融合基础设施解决方案
查看>>
Slow通道用户迎来Win10 Build 14965更新
查看>>
逆序对
查看>>