svn merge详解
svn merge详解 【OK】 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起来很是费劲。
svn merge详解的更多相关文章
- SVN功能详解
SVN功能详解 TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. ...
- 【山外笔记-SVN命令】svn命令详解
本文打印版文件下载地址 [山外笔记-SVN命令]svn命令详解-打印版.pdf 一.命令简介 svn命令用于Subversion命令行客户端,执行svn相关的操作. 二.命令语法 1.svn语法: ( ...
- Linux SVN 命令详解
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain ...
- Linux SVN 命令详解(zz)
Linux下常用SVN命令 2012-04-02 11:46:00 标签:服务器 目录 Linux checkout linux系统 1.将文件checkout到本地目录 svn checkout p ...
- Linux下svn命令详解
本文主要是说明linux下svn命令的使用方法,同时记录自己在使用中遇到的一些疑惑. 1.Linux命令行下将文件checkout到本地目录 svn checkout url(url是服务器上的目录) ...
- SVN命令详解
在开发中,除了在本机文件夹上进行svn更新外,在命令行中进行svn操作也非常关键,下面列举下网站摘抄的一些文档:1.将文件checkout到本地目录 svn checkout path(path是服务 ...
- Linux SVN 操作详解(转)
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain ...
- SVN四部曲之SVN使用详解进阶
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- SVN四部曲之SVN设置详解深入
想知道不同的设置是干什么用的,你只需将鼠标指针在编辑框/选项框上停留一秒钟...一个帮助提示气泡就会弹出来. 常规设置 图 4.68. 设置对话框,常规设置页面 这个对话框允许你指定自己喜欢的语言,同 ...
随机推荐
- PHP关闭notice级别的错误提示
1.在php.ini文件中改动error_reporting改为: error_reporting=E_ALL & ~E_NOTICE 2.如果你不能操作php.ini文件,你可以使用如下方法 ...
- Python学习-django-Model操作
Django之Model操作 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- POJ 2079 最大三角形面积(凸包)
Triangle Description Given n distinct points on a plane, your task is to find the triangle that have ...
- centos安装Linux
CentOS下安装Redis Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计 ...
- sed命令例子详解
sed -e '/Patricia/h' -e '/Margot/x' datafile 包含Margot的行将被包含Patricia的行替换: sed -e /WE/{h;d;}' -e '/CT/ ...
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
python读取文件中含有中文时, 会报错: 解决办法是:打开文件时以utf-8格式打开,同样适用于gbk
- SpringMVC + MyBatis简单示例
该项目基于Maven开发,该项目中包含了MyBatis自动创建表的功能,具体实现查阅MyBatis---自动创建表 源码下载 配置 maven支持pom.xml <project xmlns=& ...
- python 三目运算
python中的三目运算: result = a if condition else b #当满足condition返回a否则返回b 三目运算可以使你的代码看起来简洁,且运算高效
- HA集群中namenode连接不上journalnode,导致namenode启动不了
查看日志发现一下的错误: 2018-10-08 15:29:26,373 FATAL org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: ...
- SQL Server无法连接到数据库
连接数据库的时候出现如下错误: 我解决的使用方法: 第一步:关闭上面的错误,取消连接数据库. 第二步:开始->程序->Microsoft SQL Server 2008 R2->配置 ...