专家全面剖析SVN合并跟踪问题

本节和大家一起学习一下SVN合并跟踪,主要从八个方面来介绍,希望通过本节的学习,大家能够掌握有关SVN合并跟踪方面的知识。SVN1.5支持合并跟踪,本文将对什么是合并跟踪,及其对你们组织具备的意义提供了高级的总体看法,我将会从许多基本的解释开始,如果你熟悉分支与合并,请掠过第1段。

创新互联是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:做网站、成都网站建设、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。

1.什么是分支与合并?

开发团队经常会在多个并行线上开发,叫做”分支”,一个分支从拷贝开发项目(或一个目录)所有的文件开始,然后开始单独的维护这个拷贝,文件开始都是相同的,但经过一段时间,它们将会不同,因为不同的开发者在不同分支做出了修改。
为什么分支?你或许在SVN创建一个分支用来维护产品发布,同时为下一个版本工作。为什么?下一个版本会有新的特性,但是在维护分支你只接受bug修改。另一个用例是开发复杂的新特性,而它会将使得开发构建不稳定,通过在不同分支开发,你将其他开发者从可能的构建失败中分离出去。SVN自己的合并跟踪特性在一个分支上开发了差不多一年。

Graph1.两个分支的主线开发(trunk)
SVN一直支持分支,但与其他系统不同,它不会真正的拷贝文件,那样会快速加大版本库的体积。相反,SVN会创建一个到原来已有目录的快速引用,只是记录分支和trunk的文件修改,这样的结果是创建分支非常迅速,版本库几乎不会增加大小。
有些时候,代码需要合并。例如,一个开发者在维护分支上修订了一个bug,你会希望将修改合并到主开发线上,否则,你的下个发布还会有这个bug。另一个例子是在分支上开发一个新特性。就像我们说的,SVN自己的合并跟踪特性就是在分支上开发的,在2007年2月,这个特性足够稳定,然后合并到了trunk。

Graph2.合并代码

让我们看一个简单的SVN合并跟踪中合并实例,这是我们的代码:

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
>>svnmerge:SVN将修改从分支合并到trunk。
main(){printf(”hello,worldn”);}main(){printf(”hello,worldn”);}

2.SVN与合并

就像分支,SVN一直支持合并,如果你要求它可以自动完成许多工作。但是SVN不会”记住”什么代码从什么分支在什么时候合并,尽管分支与合并在SVN中工作很好,但是合并跟踪特性的添加解决了许多限制:
重复合并,假设你有一个特性分支与主干同步,没有合并跟踪时,你必须小心的(且手工的)记录哪些修订版本已经合并,这会非常乏味,而且如果你忘了合并特定修改或是创建叫做”伪造的冲突”的东西,这意味着文件没有正确的合并,结果修订版本有错误。
审计。当你合并一个特性分支回trunk,trunk的历史只记录了合并的发生,但是不知道合并了什么,这样就很难准确找出合并了什么到trunk。

3.这对你意味着什么?

开发团队多年里成功使用SVN分支和合并,但是SVN合并跟踪提供了许多好处:
合并跟踪添加了审计/跟踪能力(那些代码合并了,何时,何地?)。许多组织因为管理目的需要这个特性。
合并跟踪减少了错误和管理费用。团队会因为SVN的合并跟踪功能提高生产力。
经常合并很重要。两个开始相同的文件会随着时间变得很不一样,不同的越多,越难以合并。如果经常合并,增量的区别会比较小,会易于合并。合并跟踪可以使得易于经常合并。
许多选择SVN的公司采用限制分支的策略,他们不能从好的分支策略和并行开发中得到好处,例如:他们选择在主开发线开发一个风险很大的新特性,结果就是项目成员要处理经常的构建错误。
最终的好处:一些公司还没有使用SVN,而使用传统的昂贵的工具,他们在等待合并跟踪。

4.SVN合并跟踪

SVN1.5记录合并时发生的事情:它会跟踪合并,所以下一次SVN会记住上一次合并的事情,这个特性支持了下面的用例:
重复合并:本周将分支合并到另一个分支,下一周再做一遍。SVN会记住已经合并的东西,而且只合并新的修改。
冲突解决的自动合并。SVN可以自动完成合并的大多数工作,但是合并不可避免的带来冲突,SVN的内部合并算法不能解决。如果这样,SVN会告诉用户手工解决冲突。MarkPhippard的讲了这个问题。
Cherrypicking:合并只针对一个或部分修改,而不是所有的修改。
记录手工合并:有时候用户会手工合并一些东西(使用编辑器从一个文件拷贝代码到另一个文件),SVN1.5具备明确添加手工合并的能力,所以合并跟踪信息依然完整。
合并回退:取消一个合并。合并经常不是很***,你会发现一些事情出了问题,SVN允许你取消合并。
合并审计:合并数据会自动添加到提交日志(MarkPhippard也讲了这个问题)。

5.GUI客户端和合并跟踪

如果SVN的GUI客户端支持它,合并跟踪会真的非常强大。GUI客户端会利用合并跟踪特性让合并易于使用,而且对所有用户都更加接近。CollabNet在一个Eclipse的合并跟踪客户端上工作,未来的几天可能会有一个预览,openCollabNet这里。
SVN1.5对客户端有一个反馈,例如:有时候SVN不能自动合并两个文件,需要开发者解决”合并冲突”,SVN会告诉客户,由客户来决定怎样做,例如Subclipse会将冲突文件发送到Eclipse的图形化diff工具,所以用户可以解决这个冲突(它实际上进行了3方diff,但是那超出了本文的范围)。

6.SVN合并跟踪早期采用计划

为了加快SVN1.5的合并跟踪特性的开发,CollabNet在openCollabNet开始了一个MergeTrackingEarlyAdopterProgram,在这个程序里你可以看到:
SVN合并跟踪设计文档。
包含合并跟踪特性的SVN1.5预发布程序
一个包含合并跟踪历史的实例SVN版本库
一个与CollabNet的SVN提交者和其他人讨论这个特性的论坛
缺陷报告和改进请求
很快也会发布GUI客户端
你可以在这里找到程序:http://merge-tracking.open.collab.net

7.下面是什么?

合并跟踪的主张很直接:”SVN以前没有这个功能,现在有了”,你准备好了吗?
如果你正在因为不想处理麻烦的手工合并跟踪而为分支踌躇,你或许可以重新思考一下分支策略,来充分利用在不同分支并行开发的好处。在9月26日,CollabNet会组织一个关于分支策略的webinar,CollabNet的SVN顾问BobJenkins和AukeJilderda会解释不同的分支策略,并展示SVN1.5如何支持他们。这里注册。
合并跟踪改进了合并的质量,添加了跟踪能力。加入MergeTrackingEarlyAdopterprogram,现在就开始学习这个新特性。下载我们的客户端并使用,它将会帮助我们为SVN1.5做好准备。
如果你因为等待合并跟踪而还没有部署SVN,现在是你离开你的遗留工具而使用SVN的时候了。

8.背景:CollabNet与SVN合并跟踪

CollabNet强烈的投入到合并跟踪特性的开发:
CollabNet组织了需求收集的客户峰会(2006年1月)。
CollabNet雇员编写了大多数规格。
CollabNet领导了合并跟踪特性的开发力量。
我们开始了MergeTrackingEarlyAdopterProgram。
CollabNet开发了合并跟踪的GUI客户端
核对前几日的blog可以得到GUI客户端的信息,并且注册SVN1.5的分支与合并webinar。

网页题目:专家全面剖析SVN合并跟踪问题
本文网址:http://www.gawzjz.com/qtweb2/news1/24051.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联