- 浏览: 3502016 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
Subversion 1.5支持合并跟踪,本文将对什么是合并跟踪,及其对你们组织具备的意义提供了高级的总体看法,我将会从许多基本的解释开始,如果你熟悉分支与合并,请掠过第1段。
1. 什么是分支与合并?
开发团队经常会在多个并行线上开发,叫做”分支”,一个分支从拷贝开发项目(或一个目录)所有的文件开始,然后开始单独的维护这个拷贝,文件开始都是相同的,但经过一段时间,它们将会不同,因为不同的开发者在不同分支做出了修改。
为什么分支?你或许在Subversion创建一个分支用来维护产品发布,同时为下一个版本工作。为什么?下一个版本会有新的特性,但是在维护分支 你只接受bug修改。另一个用例是开发复杂的新特性,而它会将使得开发构建不稳定,通过在不同分支开发,你将其他开发者从可能的构建失败中分离出去。 Subversion自己的合并跟踪特性在一个分支上开发了差不多一年。
Graph 1. 两个分支的主线开发 (trunk)
Subversion一直支持分支,但与其他系统不同,它不会真正的拷贝文件,那样会快速加大版本库的体积。相反,Subversion会创建一个到原来已有目录的快速引用,只是记录分支和trunk的文件修改,这样的结果是创建分支非常迅速,版本库几乎不会增加大小。
有些时候,代码需要合并。例如,一个开发者在维护分支上修订了一个bug,你会希望将修改合并到主开发线 上,否则,你的下个发布还会有这个bug。另一个例子是在分支上开发一个新特性。就像我们说的,Subversion自己的合并跟踪特性就是在分支上开发 的,在2007年2月,这个特性足够稳定,然后合并到了trunk。
Graph 2. 合并代码
让我们看一个简单的合并实例,这是我们的代码:
trunk的代码 (主码基) |
|
main() { printf(”hello, wordn”); } |
现在我们做一个分支,从用户的角度会有两份代码:
trunk的代码 (主码基) |
分支代码 |
main() { printf(”hello, wordn”); } |
main() { printf(”hello, wordn”); } |
“Word”实际上应该为”World”,我们有一个bug,开发者在分支上修改了它,文件现在已经不同了。 |
|
main() { printf(”hello, wordn”); } |
main() { printf(”hello, worldn”); } |
在某一时刻,bug修正合并到了trunk |
|
main() { printf(”hello, worldn”); } |
main() { printf(”hello, worldn”); } |
2. Subversion与合并
就像分支,Subversion一直支持合并,如果你要求它可以自动完成许多工作。但是Subversion不会”记住”什么代码从什么分支在什么时候合并,尽管分支与合并在Subversion中工作很好,但是合并跟踪特性的添加解决了许多限制:
- 重复合并,假设你有一个特性分支与主干同步,没有合并跟踪时,你必须小心的(且手工的)记录哪些修订版本已经合并,这会非常乏味,而且如果你忘了合并特定修改或是创建叫做”伪造的冲突”的东西,这意味着文件没有正确的合并,结果修订版本有错误。
- 审计。当你合并一个特性分支回trunk,trunk的历史只记录了合并的发生,但是不知道合并了什么,这样就很难准确找出合并了什么到trunk。
3. 这对你意味着什么?
开发团队多年里成功使用Subversion分支和合并,但是合并跟踪提供了许多好处:
- 合并跟踪添加了审计/跟踪能力(那些代码合并了,何时,何地?)。许多组织因为管理目的需要这个特性。
- 合并跟踪减少了错误和管理费用。团队会因为Subversion的合并跟踪功能提高生产力。
- 经常合并很重要。两个开始相同的文件会随着时间变得很不一样,不同的越多,越难以合并。如果经常合并,增量的区别会比较小,会易于合并。合并跟踪可以使得易于经常合并。
- 许多选择Subversion的公司采用限制分支的策略,他们不能从好的分支策略和并行开发中得到好处,例如:他们选择在主开发线开发一个风险很大的新特性,结果就是项目成员要处理经常的构建错误。
- 最终的好处:一些公司还没有使用Subversion,而使用传统的昂贵的工具,他们在等待合并跟踪。
4. Subversion 1.5的合并跟踪
Subversion 1.5记录合并时发生的事情:它会跟踪合并,所以下一次Subversion会记住上一次合并的事情,这个特性支持了下面的用例:
- 重复合并:本周将分支合并到另一个分支,下一周再做一遍。Subversion会记住已经合并的东西,而且只合并新的修改。
- 冲突解决的自动合并。Subversion可以自动完成合并的大多数工作,但是合并不可避免的带来冲突,Subversion的内部合并算法不能解决。如果这样,Subversion会告诉用户手工解决冲突。Mark Phippard的讲了这个问题 。
- Cherry picking:合并只针对一个或部分修改,而不是所有的修改。
- 记录手工合并:有时候用户会手工合并一些东西(使用编辑器从一个文件拷贝代码到另一个文件),Subversion 1.5具备明确添加手工合并的能力,所以合并跟踪信息依然完整。
- 合并回退:取消一个合并。合并经常不是很完美,你会发现一些事情出了问题,Subversion允许你取消合并。
- 合并审计:合并数据会自动添加到提交日志(Mark Phippard也讲了这个问题 )。
5. GUI客户端和合并跟踪
如果Subversion的GUI客户端支持它,合并跟踪会真的非常强大。GUI客户端会利用合并跟踪特性让合并易于使用,而且对所有用户都更加接 近。CollabNet在一个Eclipse的合并跟踪客户端上工作,未来的几天可能会有一个预览,openCollabNet这里。
Subversion 1.5对客户端有一个反馈,例如:有时候Subversion不能自动合并两个文件,需要开发者解决”合并冲突”,Subversion会告诉客户,由客 户来决定怎样做,例如Subclipse会将冲突文件发送到Eclipse的图形化diff工具,所以用户可以解决这个冲突(它实际上进行了3方 diff,但是那超出了本文的范围)。
6. 合并跟踪早期采用计划
为了加快Subversion 1.5的合并跟踪特性的开发,CollabNet在openCollabNet开始了一个Merge Tracking Early Adopter Program ,在这个程序里你可以看到:
- Subversion合并跟踪设计文档。
- 包含合并跟踪特性的Subversion 1.5预发布程序
- 一个包含合并跟踪历史的实例Subversion版本库
- 一个与CollabNet的Subversion提交者和其他人讨论这个特性的论坛
- 缺陷报告和改进请求
- 很快也会发布GUI客户端
你可以在这里找到程序:http://merge-tracking.open.collab.net
7. 下面是什么?
合并跟踪的主张很直接:”Subversion以前没有这个功能,现在有了”,你准备好了吗?
- 如果你正在因为不想处理麻烦的手工合并跟踪而为分支踌躇,你或许可以重新思考一下分支策略,来充分利用在不同分支并行开发的好处。在9月26 日,CollabNet会组织一个关于分支策略的webinar,CollabNet的Subversion顾问Bob Jenkins和Auke Jilderda会解释不同的分支策略,并展示Subversion 1.5如何支持他们。这里注册 。
- 合并跟踪改进了合并的质量,添加了跟踪能力。加入Merge Tracking Early Adopter program,现在就开始学习这个新特性。下载我们的客户端并使用,它将会帮助我们为Subversion 1.5做好准备。
- 如果你因为等待合并跟踪而还没有部署Subversion,现在是你离开你的遗留工具而使用Subversion的时候了。
8. 背景:CollabNet与合并跟踪
CollabNet强烈的投入到合并跟踪特性的开发:
- CollabNet组织了需求收集的客户峰会(2006年1月)。
- CollabNet雇员编写了大多数规格。
- CollabNet领导了合并跟踪特性的开发力量。
- 我们开始了Merge Tracking Early Adopter Program。
- CollabNet开发了合并跟踪的GUI客户端
核对前几日的blog可以得到GUI客户端的信息,并且注册Subversion 1.5的分支与合并webinar 。
发表评论
-
maven常见问题问答
2012-05-05 11:34 89391.前言 Maven,发音是[`meivin ... -
SWOT分析模型
2011-10-20 08:50 2321SWOT分析模型(SWOT Analysis) SWO ... -
时间盒策略--让你必胜的15种秘诀
2011-04-26 23:34 2329简单地说,时间盒是我 ... -
猎人和猎狗的故事
2011-03-07 09:28 2368有一天,猎人带着一 ... -
项目进度计划管理中五种时间
2011-03-03 00:15 2376在大多数复杂的建设项目进度计划管理中,一般都记录五种时间 ... -
PSP个人软件过程
2011-02-05 00:57 4289个人软件过程(Personal Software ... -
eclipse和UML工具EA的连接方法
2010-06-24 19:15 7427选择了好久UML工具,在rose、eclipseUML、EA等 ... -
领导者需要警惕的六大日常决策陷阱
2010-06-09 14:39 2099决策是每个经理人最重 ... -
净室软件工程及发展
2010-05-16 22:23 1756净室软件工程及发展 本文转载自软件工程专 ... -
用“看板图”实现敏捷项目的可视化
2009-10-03 23:10 2635社区 Agile 主题 协 ... -
Mylyn 2.0,集成任务和自动上下文管理
2009-09-26 18:51 3176虽然软件系统、框架和工具可以无限制地发展,但开发人员实际处 ... -
如何组织一个高效的开发团队?
2009-09-26 18:28 1776引言 俗语云:“ ... -
采用 XP 方法使软件项目获得更大成功
2009-09-26 18:08 1620使用面向对象编程变得 ... -
User Story 概览—承上启下的重要一环
2009-09-26 18:06 2681软件开发是一个从捕获客户需求到编码实现的过程。在我们传统的印象 ... -
顿悟测试驱动开发
2009-09-26 15:18 1618很早就听闻过测试驱动 ... -
User Story 在敏捷开发过程中的应用
2009-09-26 15:11 30881 ... -
用JIRA、CVS、XPlanner、WIKI来进行项目管理
2009-09-26 04:35 2191从版本管理的角度来 ... -
项目管理软件与IT项目经理人
2009-09-26 04:33 1964本文综合介绍了项目管理软件的特征,CA-SuperProjec ... -
信息系统建设项目风险评估方法
2009-02-22 20:52 2004评估这个词并不陌 ... -
svn备份策略
2009-01-12 13:56 9404(本文例子基于 ...
相关推荐
**Subversion 分支与合并详解** Subversion(简称SVN)是一种版本控制系统,它用于管理对源代码等文件的修改历史,便于团队协作和代码管理。在这个系统中,分支和合并是两个至关重要的概念,它们在多用户协作环境中...
SubVersion(简称SVN)是一种广泛使用的版本控制系统,它能够跟踪文件和目录的变更,使多个用户协同工作在同一个项目上成为可能。本讲解将深入探讨SubVersion的基础概念、安装配置、基本操作以及在实际项目中的应用...
1. 版本控制:Subversion通过版本号跟踪文件和目录的每次更改,用户可以轻松回滚到以前的版本。 2. 并行开发:多个开发者可以在同一项目上同时工作,Subversion会解决合并冲突的问题。 3. 分支和标签:分支允许...
Subversion引入了一种新的“合并追踪”机制,它可以更精确地跟踪哪些更改已被合并到哪个分支,减少了手动跟踪和错误的可能性。这使得开发者可以更容易地在多个分支之间进行工作,并且在合并代码时能更好地避免冲突。...
1. **版本化文件和目录**:Subversion能够跟踪文件和目录的历史变更,每个版本都有唯一的标识符,可以随时回退到任何历史状态。 2. **分支和合并**:通过分支功能,开发人员可以在不影响主干开发的情况下独立工作,...
综上所述,Subversion提供了一套完整的版本控制解决方案,不仅支持基础的操作,还具备高级的功能如分支和合并,适用于各种规模的项目管理和团队协作。通过掌握Subversion的核心概念和操作,开发者能够有效地管理项目...
1. **增强的冲突解决**:Subversion 1.5引入了“合并跟踪”功能,这大大改进了处理合并冲突的能力。现在,系统可以更准确地识别哪些部分的代码在合并时产生了冲突,帮助用户更高效地解决这些问题。 2. **改进的性能...
Subversion是一种开放源代码的版本控制系统,它通过跟踪文件和目录的变更来管理项目的历史版本。与传统的版本控制系统相比,Subversion在设计时就考虑到了现代软件工程的需求,提供了更为强大的功能集。 ##### 1.2 ...
Subversion(SVN)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。这个"subversion-1.8.11"压缩包文件很可能是Subversion 1.8.11版本的源代码或者安装包,包含了该版本的所有组件和相关文件。...
Apache Subversion(简称 SVN)是一个开源的版本控制系统,用于管理和跟踪文件和目录的变更。它允许团队成员协同工作,共享和追踪项目代码的不同版本。下面是一些关于 Apache Subversion 的要点: 版本控制:SVN ...
Subversion(SVN)是一个流行的开源版本控制系统,用于管理和跟踪文件和目录的变更。这个"subversion-1.7.9.zip"文件是Subversion 1.7.9版本的压缩包,它包含了该版本的所有源代码、文档、构建脚本和其他必要的组件...
2. **合并跟踪增强**:合并冲突的处理得到改善,提供更准确的合并历史和更好的冲突检测与解决工具。 3. **无锁合并**:在某些情况下,可以进行无锁合并,这减少了由于锁定导致的阻塞问题。 4. **更好的URL引用**:...
Subversion通过提供版本化机制,使得多人协作开发时能有效地跟踪和合并代码更改,避免了代码冲突和数据丢失的问题。 在安装和配置Subversion命令行工具之前,你需要了解以下关键知识点: 1. **版本控制系统**:...
Subversion 的核心功能是跟踪文件和目录的历史变更,允许团队成员同时编辑同一份代码,然后合并这些变更。这使得多人协作变得可能,同时也提供了回滚到旧版本的能力,以防万一需要恢复到某个特定的状态。 2. 分支...
它在软件开发领域中广泛使用,特别是在多人协作的环境中,帮助团队成员协同工作,跟踪文件的修改历史,以及解决合并冲突等问题。Subversion 1.7.2是Subversion的一个特定版本,发布于2011年,它带来了许多改进和新...