- 写在前面
- 一些相关的概念和原理
- 进行分支开发的最佳实践
- 合并的分类
- 在 Eclipse 中进行合并操作
- 相关资源
写在前面
本文是由演讲整理而来的,介绍了 SVN 分支与合并的概念、流程和一些实际操作方法,适合对版本控制有基本认识然后想了解 SVN 分支与合并的使用方法的读者。
对应 SVN 版本最低为 1.5,因为分支、合并的很多功能都是 1.5(release notes ) 才加进来的。
一些相关的概念和原理
- 分支(branch)和标记(tag)对于 SVN 来说就只是副本(copy),没有任何其它意义。分支和标记的意义是我们人为给予的。
- SVN 的副本是通过"cheap copies "来实现的,建立一个副本就类似 Unix 中创建一个硬链接(hard link),空间和时间的消耗都是固定并且很小的,因此不必太过担心副本太多而导致性能问题。
- SVN 的文件储存 是通过差异(diff)来实现的,底层储存方法有两种:1、Berkeley DB,完整保存一个文件的最新版本(revision),旧版本通过反向差异(reverse diffs)来获取。2、FSFS,跟 BDB 相反,完整保存一个文件的初始版本,后续版本通过正向差异来获取。当然,为了避免版本太多而造成性能下降,SVN 还使用了"skip-deltas "来减少需要追溯的版本数。
- SVN 属性(property )可以附带在文件、目录和版本(revision)上。文件和目录的属性类似文件内容,会被记录进版本库中的,例如每次提交时的注释,其实就是该版本的一个属性 svn:log。以"svn:"开头的属性是系统预留的,用户不应该自定义这样的属性。
进行分支开发的最佳实践
- 做分支上做开发的时候,必须定期使分支与主干同步,避免开发完成后合并(merge)回主干时出现严重冲突(confict)。
- 进行合并前,处理掉工作副本上的所有本地修改,方便合并失败时进行回滚(revert)。
- 进行合并时,特别注意 新增/删除 操作,因为很多冲突都是这类操作引起的。
- 完成一个分支的功能并合并回主干后,抛弃该分支,后续其它功能的开发使用新建的分支。当然,也有办法继续使用该分支。
合并的分类
1、从主干到分支
- svn merge [-r M:N] ^/trunk
假设"^/trunk"是主干的 URL,当前目录为分支的工作副本。该命令同步主干的最新修改到当前工作副本,用于使分支跟主干保持同步。SVN 会通过 svn:mergeinfo 属性来记录当前工作副本已经合并过的版本号,然后在每次合并时选择合适的(eligible)版本进行合并。当然,也可以自己手动指定合并版本M到N的修改。
2、从分支到主干
- svn merge --reintegrate ^/branches/quota
假设"^/branches/quota"是分支的 URL,当前目录为主干的工作副本。该命令将分支的最新版本(@HEAD)跟主干的最新版本进行比较,将差异实施到当前工作副本,用于将在分支上完成的工作合并回主干。
分支使用 --reintegrate 合并回主干后,如果继续在该分支上开发,当需要同步主干的修改到分支过来时,默认会包括之前 reintegrate 的修改,而这些修改已经在分支上做过了,所以这样往往会导致冲突。这也是前面“最佳实践”中最后一个建议的一个原因。当然,想要使这个分支继续可用也是可以的,这就需要使用下面这第三种合并。
3、仅记录的合并
- svn merge -c 25 --record-only ^/trunk
假设当前目录为分支的工作副本,该命令将主干的版本25标记为已合并到当前工作副本,但并不会进行实质性的合并,这样下次合并主干到分支时,该版本的修改就会被跳过,避免修改被重复实施导致的冲突。其实这种合并就是改一下 svn:mergeinfo 而已,但直接修改太危险了,所以弄了这样一个所谓合并来规范操作。
在 Eclipse 中进行合并操作
Subclipse
在 Eclipse 中有两个比较流行的 SVN 插件:Subclipse 和 Subversive,关于两者的讨论有很多,例如这里 。本文只介绍 Subclipse。
上图是 Subclipse 进行合并操作时的界面,该图所对应的操作是:将 trunk 上版本 8 至今的修改同步到工作副本 pearbranch,也就是分支 branches/quake。这里可以发现几个问题:
- 不能进行自动合并,必须手工指定版本号。
- 不能进行仅记录的合并
- 不能直接进行 --reintegrate 的合并
CollabNet Merge Client
上述 Subclipse 的不足,应该是因为 Subclipse 默认的合并实现是基于 SVN 1.4 之前的,那时还没有 svn:mergeinfo、--reintegrate 和 --record-only 呢。要支持这些 1.5 的新特性,可以安装 CollabNet Merge Client。
CollabNet Merge Client 是 Subclipse 的一个可选功能,其实就是一个增强的、支持新特性的合并实现,如上图所示,它的优点有:
- 支持合并信息自动跟踪和自动合并
- 支持 --reintegrate 和 --record-only
- 合并前能对工作副本进行检查
相关资源
主要是看 Bubble-Up Method 这一节,是 revision 的基本原理。
『Version Control with Subversion』
官方手册,学习 SVN 必读。
相关推荐
下面是对SVN分支与合并的详细讲解。 1. SVN分支创建: 在SVN中,创建分支通常是为了进行长期的特性开发或隔离修复工作。你可以通过`svn copy`命令或者在图形界面工具中选择“创建分支”选项来实现。例如,要从...
在实际开发中,SVN的分支管理策略可以帮助团队有效地组织工作,如使用特性分支进行新功能开发,使用hotfix分支快速修复生产环境的bug,以及使用release分支准备产品的发布。了解并熟练掌握这些基本操作是SVN协同开发...
SVN 分支与合并详解 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和其他需要版本控制的领域。在软件开发过程中,SVN 的分支与合并功能是非常重要的,下面我们将详细介绍 SVN 中的分支...
### SVN分支合并经验总结 在软件开发过程中,版本控制系统如Subversion(SVN)是团队协作不可或缺的工具。其中,分支管理和合并策略是确保代码质量和维护项目稳定性的重要环节。本文将深入探讨在SVN中进行分支合并...
SVN分支的合并和同步 SVN(Subversion)是一种版本...* 不管是从trunk合并到分支还是最终从分支合并回trunk,在每次合并前最好先update,然后将本地的修改先全部commit,保护好现场,万一合并不理想随时都可以revert
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件的历史记录。在团队开发中,经常需要进行分支与主干的合并操作,以整合各个开发分支的更新到主干,确保所有改动都能被正确地...
2. **使用`svn mergeinfo`**:利用SVN的`mergeinfo`特性,可以记录哪些版本已经被合并过。在合并前运行`svn propget svn:mergeinfo .`命令,查看当前目录的合并历史,然后确保在合并时正确指定源版本范围。 3. **...
#### 四、从分支合并到主干 当分支上的新需求开发完成并通过测试后,就需要将其合并回主干,以便进行下一步的开发或部署。 1. **提交分支代码**: 确保分支中的所有更改都已经提交到SVN仓库。 2. **执行合并操作**:...
- **最终合并**:当`branch`的功能开发完成并经过测试后,可以使用“Reintegrateabranch”选项将整个分支合并回`trunk`。 ##### 切换分支 在开发过程中,开发人员可能需要在不同的分支之间切换,以便进行测试或者...
3. **记录合并信息**: 合并后,使用`svn commit`提交更改,并在提交消息中描述合并的来源,以便团队成员了解发生了什么。 4. **自动合并**: `svn merge`通常能自动合并大部分更改,但无法处理同时修改相同代码的...
- 可以选择从主干合并到分支、从分支合并到主干等不同操作。 - 根据需求选择合并选项,点击“OK”后会显示差异列表供用户确认。 #### 四、实践总结 通过上述步骤,我们可以有效地利用 SVN 进行项目的版本管理和...
在深入讨论如何使用SVN进行LabVIEW项目的分支与合并之前,我们首先回顾一下SVN的一些基本概念: - **仓库(Repository)**:SVN的核心是一个中央仓库,用于存储项目的全部版本历史。 - **工作副本(Working Copy)*...
通过《SVN 分支与合并.doc》和《用SVN分支管理多版本.pdf》文档,您可以更深入地了解分支和标记的实战操作,包括更复杂的合并策略和团队协作的最佳实践。 总之,svn的分支和标记机制为软件开发提供了灵活的版本控制...
在并行开发多个版本时,使用SVN分支管理能够提高开发效率,保持各个开发环境(包括开发环境、测试环境和生产环境)之间的独立性。此外,合理的分支管理策略可以降低在合并主干代码时发生冲突的概率,减少解决这些...
3. **分支与合并**:SVN支持分支和合并操作,允许开发者创建独立的工作线(分支)进行开发,同时保持主线(主分支)的稳定。当分支上的工作完成并经过测试后,可以通过合并操作将分支的更改合并回主线,从而实现团队...
VS2019 SVN插件将Subversion的功能无缝地整合到Visual Studio 2019 IDE中,使得开发人员在编写代码的同时,可以方便地进行版本控制操作,如提交、更新、合并、查看历史记录等。 安装VisualSVN插件是实现VS2019与SVN...
svn 版本控制与分支管理 svn 版本控制系统是一种常用的版本控制系统,它可以帮助开发团队更好地管理代码库。版本控制系统的主要功能是跟踪代码的变化...但是,需要正确地使用 svn 版本控制系统,避免出现错误和冲突。
本文将详细介绍如何使用SVN进行常见的操作,特别是查看代码的提交记录和改动细节。 ### 1. 安装与配置SVN 首先,你需要在计算机上安装SVN客户端,例如TortoiseSVN,这是一个直观且用户友好的Windows客户端。安装...
完成后,可以将分支合并回主分支。 6. **标签(Tag)**:用于标记特定版本,通常用于发布里程碑或稳定版本。标签是仓库的一个快照,不应被修改,以便随时回溯。 7. **冲突(Conflict)**:当两个或多个用户同时...