`
qqdwll
  • 浏览: 136684 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何使用svn进行merge

阅读更多
版权声明:可以任意转载,转载时请务必以超链接形式标明文章 原始出处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源代码SVNMerge源代码

    在这个特定的上下文中,"SVNMerge源代码"指的是该工具的原始编程语言代码,可能是用C、C++或者Python等语言编写的,它允许开发者深入理解工具的工作原理并可能进行定制或扩展。 TortoiseMerge是与SVN协同使用的另一...

    svn merge简单操作

    ### SVN Merge 操作详解 #### 一、引言 Subversion (SVN) 是一个广泛使用的版本控制系统,用于管理软件开发中的源代码变更历史。在团队合作中,合并分支(merge)是一项非常重要的操作,它使得开发人员能够将某个...

    svn 合并、冲突及常用功能详解

    理解并掌握`svn merge`和冲突解决对于任何使用svn进行协作开发的团队至关重要。通过学习这些知识点,你可以更有效地管理版本控制,提高团队的生产力,减少因合并和冲突带来的困扰。务必实践操作,结合文档中的图解,...

    关于SVN下不同分支代码的Merge的透彻理解.zip

    多分支开发,Merge是一个绕不过的话题,不管是Git还是SVN,公司用的是SVN,之前对于SVN的Merge没有很好的研究,出了些状况,这个问题不解决,顺畅地进行多分支开发就是海市蜃楼,下定决心把这块给完全搞透,在百度上...

    使用SVN进行版本控制 使用SVN1.2

    ### 使用SVN进行版本控制:SVN 1.2详解 #### 一、SVN简介与重要性 Subversion(简称SVN)是一款开源的版本控制系统,在软件开发领域有着广泛的应用。它允许开发者们追踪代码的历史变更记录,并支持多人协作开发。...

    使用svn进行版本控制 中文版

    ### 使用SVN进行版本控制的关键知识点 #### 一、SVN简介 - **Subversion (SVN)**:Subversion是一个开源的版本控制系统,用于管理软件开发中的代码版本控制。它支持分布式开发模式,并且能够有效地处理大型项目。 ...

    SVN 使用教程,手把手教你使用SVN

    使用 SVN 的 merge 命令,可以将分支上的修改合并回主分支或其他分支。在合并前应先更新本地工作目录,并确保没有冲突。 **7. 版本间的比较** 通过 TortoiseSVN 的 "Compare" 功能,可以直观地查看不同修订号之间...

    如何使用SVN进行版本管理笔记.zip

    当分支上的工作完成并经过测试后,可以使用`svn merge`命令将更改合并回主分支。 处理冲突是SVN中的关键部分。当两个或更多人修改了同一文件的同一部分时,SVN无法自动确定最佳解决方案,需要人工介入解决。冲突会...

    svn 使用(VersionControlWithSubversion)

    为了更好地管理合并过程,可以使用 `svnmerge.py` 工具。这是一个用 Python 编写的 Subversion 插件,可以自动追踪合并记录。 - 安装 `svnmerge.py` 工具: ```shell $ sudo aptitude install subversion-tools ...

    SVN trunk, branch, tag merge 等的应用

    SVN(Subversion)是一种广泛使用的版本控制系统,它的核心概念包括trunk、branch和tag,这些都是进行协同开发和代码管理的重要元素。下面将详细解释这些概念以及它们在实际项目中的应用。 1. **Trunk**:Trunk通常...

    MyEclipse使用的SVN插件

    - **版本控制操作**:你可以进行常见的SVN操作,如“Checkout”(检出)、“Commit”(提交)、“Update”(更新)、“Merge”(合并)、“Diff”(差异比较)等。 5. **插件组件解析** - `antlr-runtime-3.1.3....

    SVN常用命令(使用频率最高的)

    以下是一些使用频率最高的SVN命令,确保你能快速上手并有效地利用SVN进行项目管理。 1. **初始化仓库(Create Repository)** 使用`svnadmin create`命令创建一个新的SVN仓库。例如: ``` svnadmin create /path...

    clipse中配置和使用SVN进行版本管理图文教程

    在本文中,我们将详细介绍如何在Eclipse环境中配置和使用Subversion(SVN)进行版本管理。Subversion是一款广泛使用的版本控制系统,而TortoiseSVN则是一个与Windows资源管理器集成的GUI工具,使得SVN操作更为直观。...

    使用SVN进行版本控制

    ### 使用SVN进行版本控制 #### SubVersion版本控制软件的使用手册 本手册旨在为用户提供一份详尽的SubVersion(简称SVN)版本控制软件的使用指南。SVN是一种广泛使用的开源版本控制系统,用于管理软件开发过程中的...

    linux下使用svn客户端

    ### Linux 下使用 SVN 客户端重要知识点详解 #### 一、概述 Subversion (SVN) 是一种广泛使用的版本控制系统,主要用于软件开发过程中管理源代码。在 Linux 系统中,用户可以通过命令行工具来操作 SVN,进行版本库...

    SVN教程+TortoiseMerge教程

    SVN允许开发者跟踪文件的每一次修改,创建分支进行实验性开发,以及合并这些分支到主分支。它维护了一个中央仓库,所有项目文件都存储在这里,开发者可以下载整个项目或仅更新自上次检出以来的变动。 2. **...

    SVN解决冲突(合并别人的修改)

    SVN(Subversion)是一个广泛使用的版本控制系统,它帮助开发者管理和维护...掌握这些知识对于任何使用SVN进行版本控制的团队成员都是非常重要的。正确地解决冲突可以确保代码库的完整性,并促进团队协作的顺畅进行。

    svn在linux下的使用(svn命令)

    SVN 在 Linux 下的使用(svn 命令) SVN(Subversion)是一种版本控制系统,能够帮助开发者管理代码的变更和协作。SVN 命令是 SVN 的核心组件,提供了多种功能来管理代码库。下面我们将详细介绍 SVN 在 Linux 下的...

    SVN安装包和使用

    6. **分支与合并**: SVN支持分支和合并操作,通过`svn copy`创建分支,然后在分支上开发,完成后再用`svn merge`合并回主分支。 **团队项目整合开发** 1. **版本管理**: SVN使得团队成员可以各自独立工作,通过...

Global site tag (gtag.js) - Google Analytics