- 浏览: 3471108 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 88621.前言 Maven,发音是[`meivin ... -
SWOT分析模型
2011-10-20 08:50 2246SWOT分析模型(SWOT Analysis) SWO ... -
时间盒策略--让你必胜的15种秘诀
2011-04-26 23:34 2295简单地说,时间盒是我 ... -
猎人和猎狗的故事
2011-03-07 09:28 2330有一天,猎人带着一 ... -
项目进度计划管理中五种时间
2011-03-03 00:15 2256在大多数复杂的建设项目进度计划管理中,一般都记录五种时间 ... -
PSP个人软件过程
2011-02-05 00:57 4222个人软件过程(Personal Software ... -
eclipse和UML工具EA的连接方法
2010-06-24 19:15 7383选择了好久UML工具,在rose、eclipseUML、EA等 ... -
领导者需要警惕的六大日常决策陷阱
2010-06-09 14:39 2099决策是每个经理人最重 ... -
净室软件工程及发展
2010-05-16 22:23 1719净室软件工程及发展 本文转载自软件工程专 ... -
用“看板图”实现敏捷项目的可视化
2009-10-03 23:10 2576社区 Agile 主题 协 ... -
Mylyn 2.0,集成任务和自动上下文管理
2009-09-26 18:51 3133虽然软件系统、框架和工具可以无限制地发展,但开发人员实际处 ... -
如何组织一个高效的开发团队?
2009-09-26 18:28 1745引言 俗语云:“ ... -
采用 XP 方法使软件项目获得更大成功
2009-09-26 18:08 1593使用面向对象编程变得 ... -
User Story 概览—承上启下的重要一环
2009-09-26 18:06 2641软件开发是一个从捕获客户需求到编码实现的过程。在我们传统的印象 ... -
顿悟测试驱动开发
2009-09-26 15:18 1591很早就听闻过测试驱动 ... -
User Story 在敏捷开发过程中的应用
2009-09-26 15:11 30521 ... -
用JIRA、CVS、XPlanner、WIKI来进行项目管理
2009-09-26 04:35 2153从版本管理的角度来 ... -
项目管理软件与IT项目经理人
2009-09-26 04:33 1921本文综合介绍了项目管理软件的特征,CA-SuperProjec ... -
信息系统建设项目风险评估方法
2009-02-22 20:52 1974评估这个词并不陌 ... -
svn备份策略
2009-01-12 13:56 9360(本文例子基于 ...
相关推荐
手工跟踪合并 预览合并 合并冲突 关注还是忽视祖先 合并和移动 常见用例 合并分支到另一分支 取消修改 找回删除的项目 常用分支模式 发布分支 特性分支 使用分支 标签 建立简单标签 建立复杂标签 分支维护 版本库...
Subversion Subversion Subversion Subversion Subversion
subversion svnadmin
Apache Subversion(简称 SVN)是一个开源的版本控制系统,用于管理和跟踪文件和目录的变更。它允许团队成员协同工作,共享和追踪项目代码的不同版本。下面是一些关于 Apache Subversion 的要点: 版本控制:SVN ...
NULL 博文链接:https://sosuny.iteye.com/blog/599738
Subversion,快速入门教程,本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。
Subversion服务器程序,版本控制器 服务端
Version Control with Subversion For Subversion 1.6 (Compiled from Revision 38063)
subversion安装
subversion客户端subversion客户端最新
Subversion1.7.5
SubVersion用法ppt详解
Subversion SVN 配置 使用 分支 合并
Subversion简介
CollabNet-SubversionSubversion安装配置,非常详细的介绍了安装过程
subversion-1.7.5 for java
Subversion-1.5.1 安装包 。