源:http://daquan198163.iteye.com/blog/965936
http://www.subversion.org.cn/svnbook/1.4/svn.branchmerge.copychanges.html
评:
SVN的合并操作其实是一系列操作的组合:
将主干或某个分支上的一组修订(即合并的源头)应用到另一个分支或主干(即合并的目标)的working copy(本地工作拷贝);简单说,合并包括三要素——源头、目标、目标的working copy;
如果出现冲突(conflict),需手工解决冲突;
最后提交,提交时还要在SVN备注中标明这是一次合并,如merge -r 5645:5650 svn://10.191.17.67/p17_ii/development/sourcecode/Branchs/P17-II/2011-03-17 发布前又有小改动;
为何会出现冲突,如何解决:
源不仅是个url,还包括一个修订范围,例如前面红字示例中的-r 5645:5660;
假设源头包含5646、5648、5650三个修订版,working copy的当前修订版是5649;
那么合并时SVN实际进行的操作是:diff 5646 5648,然后apply到working copy;diff 5648 5650,然后apply到working copy;
这个过程中,svn也会分别diff 5646 5649,diff 5648 5649,如果这两个diff任何一个与上文的两个diff中的任何一个恰好改了同一行代码,则出现冲突,相应的文件中会用标记分别标明这两种diff差异,同时会生产3个临时文件,分别是.working、.left_r5646、.right_r5650;
一般选择手工解决冲突,但如果很对,也可以直接保留.right_r5650作为最终结果,
更多内容,详见svnbook。
-----------------------------
合并背后的关键概念
你已经看到了svn merge命令的例子,你将会看到更多,如果你对合并是如何工作的感到迷惑,这并不奇怪,很多人和你一样。许多新用户(特别是对版本控制很陌生的用户)会对这个命令的正确语法感到不知所措,不知道怎样和什么时候使用这个特性,不要害怕,这个命令实际上比你想象的简单!有一个简单的技巧来帮助你理解svn merge的行为。
迷惑的主要原因是这个命令的名称,术语“合并”不知什么原因被用来表明分支的组合,或者是其他什么神奇的数据混合,这不是事实,一个更好的名称应该是svn diff-and-apply,这是发生的所有事件:首先两个版本库树比较,然后将区别应用到本地拷贝。
这个命令包括三个参数:
初始的版本树(通常叫做比较的左边),
最终的版本树(通常叫做比较的右边),
一个接收区别的工作拷贝(通常叫做合并的目标)。
一旦这三个参数指定以后,两个目录树将要做比较,比较结果将会作为本地修改应用到目标工作拷贝,当命令结束后,结果同你手工修改或者是使用svn add或svn delete没有什么区别,如果你喜欢这结果,你可以提交,如果不喜欢,你可以使用svn revert恢复修改。
svn merge的语法允许非常灵活的指定三个必要的参数,如下是一些例子:
$ svn merge http://svn.example.com/repos/branch1@150 \
http://svn.example.com/repos/branch2@212 \
my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk
第一种语法使用URL@REV的形式直接列出了所有参数,第二种语法可以用来作为比较同一个URL的不同版本的简略写法,最后一种语法表示工作拷贝是可选的,如果省略,默认是当前目录。
分享到:
相关推荐
**svn合并** `svn merge`是Subversion(简称svn)中的关键命令,用于将一个分支或标记的修改合并到另一个分支。在版本控制系统中,合并是协同开发的核心操作,它允许团队成员同步各自的工作,避免代码冲突。以下是...
2. **版本化模型**:SVN采用了**复制-修改-合并(Copy-Modify-Merge)**的方式进行版本控制,这与传统的锁-修改-解锁方式相比,更灵活且效率更高。 3. **文件共享问题**:在没有版本控制系统的情况下,多个用户同时...
本篇文章将深入探讨Svn版本管理的应用实践指南,旨在帮助读者更好地理解和掌握Svn的基本操作和高级技巧。 首先,我们需要理解Svn的基本概念。Svn仓库是所有项目文件的中央存储库,每个开发者可以从仓库克隆一份工作...
本指南旨在为用户提供Subversion(以下简称SVN)的基本使用方法及深入操作技巧,帮助用户快速掌握SVN的核心功能与应用场景,从而提高开发效率与项目协作能力。 ##### 1.2 范围 该指南适用于所有希望了解并使用SVN...
创建分支使用`svn copy`命令,合并使用`svn merge`。TortoiseSVN提供了图形化的操作界面,使得这些操作更为直观。 ### 8. 解决冲突 当两个或更多人同时修改同一文件时,可能会出现冲突。TortoiseSVN会标记出冲突...
3. **分支与合并**:通过`branch`和`merge`操作,支持多个并行开发线和合并代码。 4. **冲突解决**:当多人修改同一部分代码时,可能会出现冲突,客户端会提示冲突,需要手动解决。 **六、SVN日常管理** 1. **版本...
总结,SVN中文手册为理解SVN的版本控制机制提供了全面的指导,包括核心概念、命令行工具的使用以及与其他系统的比较,帮助开发者更好地管理和协作项目。通过深入学习和实践,可以充分利用SVN的优势,提高软件开发的...
本文档将详细介绍如何在SVN中创建和合并分支,旨在为开发人员提供一个清晰的操作指南。 #### 二、SVN创建分支 在SVN中创建分支的主要目的是为了隔离不同功能或版本的开发过程,减少开发活动之间的相互干扰。以下是...
这篇详细的使用指南将涵盖SVN服务器的设置、客户端的安装与配置,以及日常操作,包括提交、更新、查看历史记录等核心功能。 一、SVN服务器安装与配置 1. **选择服务器平台**:SVN服务器可以运行在多种操作系统上,...
根据给定的文件信息,以下是在IT行业中与“vs2005集成svn操作指南”相关的知识点,详细介绍了版本控制系统、Subversion(SVN)、TortoiseSVN以及AnkhSVN插件在Visual Studio 2005中的应用: ### 版本控制工具的重要...
SVN中文帮助手册是为方便中国用户理解和使用SVN而编写的文档,它提供了全面的指南、教程以及命令参考,旨在帮助用户在开发环境中有效地进行版本控制。 一、SVN的基本概念 1. 仓库(Repository):存储项目所有版本...
1. **分支与合并**:`svn branch`创建分支,`svn merge`合并分支。分支策略有助于并行开发和代码审查。 2. **标签**:`svn copy`可以创建版本标签,用于标记特定里程碑。 3. **冲突解决**:当两个或更多用户对同一...
- **目的**: 本指南旨在为初学者提供关于Subversion(SVN)的详尽指导,帮助他们理解和掌握如何使用SVN进行版本控制。 - **范围**: 适用于任何对版本控制感兴趣的新手,无论你是开发者、项目经理还是内容创作者,...
6. **分支与合并(Branching and Merging)**:分支用于隔离开发,合并则将分支的改动合并回主分支,分支操作常用`svn copy`创建,`svn merge`合并。 7. **查看历史(Log)**:通过`svn log`命令查看版本历史,了解...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许多人协同工作在同一个项目上,同时保持代码的历史记录和版本控制。通过SVN,开发者可以回溯到任何历史版本,解决冲突,并...
### Subversion (SVN) 使用指南与最佳实践 #### 目录结构与组织方式 在进行版本控制时,良好的目录结构对于项目的维护至关重要。Subversion(简称 SVN)是一种广泛使用的集中式版本控制系统,它提供了强大的功能来...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许多人协同工作,并在代码修改过程中保持数据的一致性和完整性。Eclipse是一款强大的集成开发环境(IDE),支持多种编程语言...
7. **分支与合并(Branch & Merge)**:创建分支进行开发,完成后合并回主分支。 **五、高级功能** 1. **切换分支(Switch)**:快速在不同分支间切换工作副本。 2. **解决冲突(Resolve)**:手动选择保留哪一方...