版权声明:可以任意转载,转载时请务必以超链接形式标明文章 原始出处
http://yinwm.cn/blog/2008/04/svn-merge.html和作者信息。
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这个本地工作区上.
例如:
1. svn merge --dry-run -r:73:68 http://my.repository.com/my/project/trunk
2. svn merge -r:73:68 http://my.repository.com/my/project/trunk
3. svn commit -m "Reverted to revision 68."
分享到:
相关推荐
在这个特定的上下文中,"SVNMerge源代码"指的是该工具的原始编程语言代码,可能是用C、C++或者Python等语言编写的,它允许开发者深入理解工具的工作原理并可能进行定制或扩展。 TortoiseMerge是与SVN协同使用的另一...
### SVN Merge 操作详解 #### 一、引言 Subversion (SVN) 是一个广泛使用的版本控制系统,用于管理软件开发中的源代码变更历史。在团队合作中,合并分支(merge)是一项非常重要的操作,它使得开发人员能够将某个...
理解并掌握`svn merge`和冲突解决对于任何使用svn进行协作开发的团队至关重要。通过学习这些知识点,你可以更有效地管理版本控制,提高团队的生产力,减少因合并和冲突带来的困扰。务必实践操作,结合文档中的图解,...
多分支开发,Merge是一个绕不过的话题,不管是Git还是SVN,公司用的是SVN,之前对于SVN的Merge没有很好的研究,出了些状况,这个问题不解决,顺畅地进行多分支开发就是海市蜃楼,下定决心把这块给完全搞透,在百度上...
### 使用SVN进行版本控制:SVN 1.2详解 #### 一、SVN简介与重要性 Subversion(简称SVN)是一款开源的版本控制系统,在软件开发领域有着广泛的应用。它允许开发者们追踪代码的历史变更记录,并支持多人协作开发。...
### 使用SVN进行版本控制的关键知识点 #### 一、SVN简介 - **Subversion (SVN)**:Subversion是一个开源的版本控制系统,用于管理软件开发中的代码版本控制。它支持分布式开发模式,并且能够有效地处理大型项目。 ...
使用 SVN 的 merge 命令,可以将分支上的修改合并回主分支或其他分支。在合并前应先更新本地工作目录,并确保没有冲突。 **7. 版本间的比较** 通过 TortoiseSVN 的 "Compare" 功能,可以直观地查看不同修订号之间...
当分支上的工作完成并经过测试后,可以使用`svn merge`命令将更改合并回主分支。 处理冲突是SVN中的关键部分。当两个或更多人修改了同一文件的同一部分时,SVN无法自动确定最佳解决方案,需要人工介入解决。冲突会...
为了更好地管理合并过程,可以使用 `svnmerge.py` 工具。这是一个用 Python 编写的 Subversion 插件,可以自动追踪合并记录。 - 安装 `svnmerge.py` 工具: ```shell $ sudo aptitude install subversion-tools ...
SVN(Subversion)是一种广泛使用的版本控制系统,它的核心概念包括trunk、branch和tag,这些都是进行协同开发和代码管理的重要元素。下面将详细解释这些概念以及它们在实际项目中的应用。 1. **Trunk**:Trunk通常...
- **版本控制操作**:你可以进行常见的SVN操作,如“Checkout”(检出)、“Commit”(提交)、“Update”(更新)、“Merge”(合并)、“Diff”(差异比较)等。 5. **插件组件解析** - `antlr-runtime-3.1.3....
以下是一些使用频率最高的SVN命令,确保你能快速上手并有效地利用SVN进行项目管理。 1. **初始化仓库(Create Repository)** 使用`svnadmin create`命令创建一个新的SVN仓库。例如: ``` svnadmin create /path...
在本文中,我们将详细介绍如何在Eclipse环境中配置和使用Subversion(SVN)进行版本管理。Subversion是一款广泛使用的版本控制系统,而TortoiseSVN则是一个与Windows资源管理器集成的GUI工具,使得SVN操作更为直观。...
### 使用SVN进行版本控制 #### SubVersion版本控制软件的使用手册 本手册旨在为用户提供一份详尽的SubVersion(简称SVN)版本控制软件的使用指南。SVN是一种广泛使用的开源版本控制系统,用于管理软件开发过程中的...
### Linux 下使用 SVN 客户端重要知识点详解 #### 一、概述 Subversion (SVN) 是一种广泛使用的版本控制系统,主要用于软件开发过程中管理源代码。在 Linux 系统中,用户可以通过命令行工具来操作 SVN,进行版本库...
SVN允许开发者跟踪文件的每一次修改,创建分支进行实验性开发,以及合并这些分支到主分支。它维护了一个中央仓库,所有项目文件都存储在这里,开发者可以下载整个项目或仅更新自上次检出以来的变动。 2. **...
SVN(Subversion)是一个广泛使用的版本控制系统,它帮助开发者管理和维护...掌握这些知识对于任何使用SVN进行版本控制的团队成员都是非常重要的。正确地解决冲突可以确保代码库的完整性,并促进团队协作的顺畅进行。
SVN 在 Linux 下的使用(svn 命令) SVN(Subversion)是一种版本控制系统,能够帮助开发者管理代码的变更和协作。SVN 命令是 SVN 的核心组件,提供了多种功能来管理代码库。下面我们将详细介绍 SVN 在 Linux 下的...
6. **分支与合并**: SVN支持分支和合并操作,通过`svn copy`创建分支,然后在分支上开发,完成后再用`svn merge`合并回主分支。 **团队项目整合开发** 1. **版本管理**: SVN使得团队成员可以各自独立工作,通过...