当前位置: 首页 > news >正文

转载:SVN分支合并

http://blog.163.com/lgh_2002/blog/static/4401752620106202710487/

Subversion的分支通常用于在主干程序之外,对程序进行修改。这样 可以在不扰乱主干程序进行的开发、测试、发布流程之外,尝试一下新功能的研究、修改。如果觉得新功能没问题,可以将分支合并到主干程序中。
合并前,需要将分支提交(Commit),由此看来,合并操作好象是在服务端和本地客户端同时进行的操作。
合并时,要从主干的working copy的右键菜单开始,"From" Url是合并的目的地,需选择主干的url,"To"是合并的来源,需选择分支的url。

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

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

# svn merge --help
merge: 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_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所做的所有的变化,也就是分支当前的状态相对刚刚生成的时候(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

相关文章:

  • Mysql的Profile中的status的常量含义
  • GridView里的按钮事件
  • 通用SQL数据库查询语句精华使用简介
  • Cocoa教学:Windows OOP与Cocoa MVC之对比
  • nginx 负载均衡5种配置方式
  • js代码触发事件
  • 编译Chromium
  • WPF基础之路由事件
  • KMP算法初步认知
  • PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来...
  • 超凡蜘蛛侠
  • 简单的多进程Open×××前端控制程序
  • asymptote 中使用中文
  • Deprecated: Function ereg() is deprecated in
  • 家庭电力网络摄像机
  • 《深入 React 技术栈》
  • Angular 响应式表单之下拉框
  • C++类中的特殊成员函数
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java编程基础24——递归练习
  • Joomla 2.x, 3.x useful code cheatsheet
  • magento2项目上线注意事项
  • React组件设计模式(一)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • unity如何实现一个固定宽度的orthagraphic相机
  • Web Storage相关
  • zookeeper系列(七)实战分布式命名服务
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊一聊前端的监控
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何使用 JavaScript 解析 URL
  • 数据结构java版之冒泡排序及优化
  • 网络应用优化——时延与带宽
  • 我有几个粽子,和一个故事
  • ​马来语翻译中文去哪比较好?
  • ###C语言程序设计-----C语言学习(6)#
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()
  • $L^p$ 调和函数恒为零
  • (7)STL算法之交换赋值
  • (9)目标检测_SSD的原理
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (笔试题)合法字符串
  • (二开)Flink 修改源码拓展 SQL 语法
  • (过滤器)Filter和(监听器)listener
  • (数据结构)顺序表的定义
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一) springboot详细介绍
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理出现中文乱码的情况