使用 Jazz SCM 你必须知道的 5 件事情

本文基于对 IBM Rational Team Concert(RTC)的使用,对使用 Jazz SCM 进行源代码管理和构建所必须了解的概念和原理,以及基于 Jazz SCM 进行团队协作开发的实践进行详细介绍。

张 佳, 软件工程师, IBM

张佳是 IBM 中国开发中心的软件工程师,主要工作于 e-business 解决方案以及 Java EE 企业应用开发。您可以通过 developerWorks 社区与张佳进行交流。



赵 汇川, 高级软件工程师, IBM

赵汇川是 IBM 中国软件开发实验室的一位高级软件工程师,现正从事企业应用的设计与开发。他对企业级应用软件开发、集成与软件开发方法和敏捷实践有着深入的理解和丰富的经验。您可以通过 developerWorks 社区与赵汇川进行交流。



2012 年 6 月 29 日

下载试用版:IBM® Rational® Team Concert 标准版  |  IBM® Rational® Team Concert 免费版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

引言

Jazz 平台作为 IBM Rational 所研发的项目,能够很好地与软件开发生命周期集成,使用 Jazz 协作平台团队能够更好地进行协同工作,从而使得团队开发管理以及项目进度跟踪更简单,更高效。

Jazz SCM 是一个基于 Jazz 平台的用于代码管理的系统。Jazz SCM 系统不但能够与开发环境有着良好的集成,而且可以跟踪代码变更的状态,与 build 进行集成,使得在代码管理方面更灵活,涉及到的全面。IBM Rational Team Concert (RTC) 是基于 Jazz 平台的一个团队协作开发所使用的工具。本文将结合 RTC,对使用 Jazz SCM 进行源代码管理和构建所必须了解的概念和原理,以及基于 Jazz SCM 进行团队协作开发的实践进行详细介绍。


第一部分关于 Jazz SCM 的一些概念

对于 Jazz SCM 代码管理系统,代码管理流程主要是基于流,存储库以及组件等一些关键因素所构成。其中流是整个流程中的核心部分,围绕着流建立的 Jazz SCM 代码管理系统将表现出更好的用户体验。以下是对 Jazz SCM 代码管理系统中一些关键因素的介绍。

  • 流 (Stream)

流是 Jazz SCM 系统中的第一类成员,主要表征着开发过程中的某一个版本或者某一个阶段。一个流中可以包含一个或者多个组件。通过流的建立,不同版本的代码可以在小组之间共享和管理,从而能够更好满足项目开发和代码管理的多种复杂情况,使得团队能够更好地进行协作开发。

  • 存储库 (Repository)

存储库是建立在服务器端的工作区域。它是 Jazz SCM 系统在代码管理方面一个主要的成员。一般情况下,存储库是基于流而建立的,它们之间的关系通常是多对多的。存储库不仅仅是本地工作区域的镜像,同时它在多个流之间代码版本的维护以及团队工作中扮演着重要的角色。

  • 组件 (Component)

组件是代码共享和管理的基本单位,同时也是组成流的基本单位。组件可以由一个文件或者文件夹所构成,它可以出现在一个或者多个流中,但是在每个流中必须是不同的版本。通过使用组件,可以将代码在团队中共享。

  • 基线 (Baseline)

基线主要是记录着组件在不同时间段的版本配置信息。在不同的流或者存储库中,每一个组件都会有不同的基线。每一个组件在被创建的的时候,至少都会有一个默认的基线,每当一个新的基线被创建时,相当于给对应的组件创建一个时间戳,并且一个组件的任何一个基线信息都可以在此组件的历史信息中被查询到。

  • 快照 (Snapshot)

快照是针对一个流中所有组件在同一时间状态的记录。在快照中,包含着每一个组件在流中对应着一条基线的信息,并且是持久保存着这些信息。通常在项目完成一个重要的需求变化后,会对相应的流中的所有组件创建一个快照,这样也方便对项目进行构建和部署。

图 1. 为上述 Jazz SCM 各个元素的关系图。在 Jazz SCM 代码管理系统中,代码的管理分为两个步骤:第一步,是将本地工作区域中需要提交的代码以变更集的形式检入到服务器端的存储库中;第二步,将存储库中的变更集再提交到流中。我们通常使用的代码管理系统多数只有类似 Jazz SCM 代码管理系统中第二步。对于这种两层控制的代码管理系统的好处,将在下文中做详细介绍。

图 1. Jazz SCM 元素关系图

第二部分变更集(Change Set)的组织与管理

变更集是 Jazz SCM 中关键部件之一,每当某一个组件中的一个文件或者文件夹的内容发生变化并检入,就会产生一个或者多个变更集。如果一个流中有多个组件,那么每个组件会有其自己的变更集。每一个变更集在从创建到完成之间,会有很多不同的状态,如新建变更集,当前变更集,暂挂变更集,完成变更集等。下面的表格中将对变更集一些主要的状态进行描述。

表 1. 变更集状态描述
状态名描述


新建变更集
当从本地工作区域检入所变化的文件或者文件夹时,此时会为对应的组件新建一个变更集。如果当前不存在任何变更集时,会有一个新的变更集被创建;如果已经存在一个或者多个变更集时,可以将本地工作区域的变化检入到任意一个变更集或者选择新建一个变更集。


当前变更集
每次检入变更时,最后一个检入的变更集将被置为当前变更集。如果在检入变更时,不重新制定变更集,那么变更将被检入到当前变更集。当一个组件有多个变更集时,只能有一个变更集是当前的变更集。

暂挂变更集
暂挂变更集是将已经检入的变更集暂时处于不被操作的状态,即在存储库中暂时删除这个变更集,但是其内容依旧保留在存储库中。当需要操作此变更集时,可以将其从暂挂的状态中恢复。

撤销变更集
撤销变更集是不希望已经检入的代码形成的变更集最终提交到流中时,便可以撤销此变更集。当变更集被撤消后,本地工作区域的代码也将还原为改动前的版本。

提交变更集
当活动的变更集被交付后,可以称此变更集已完成。在变更集交付之后,变更集里的内容将不能够在更改。所有关于某个组件已经交付的变更集,可以在历史中查看到。

第三部分与团队共享工作的三种方式

利用 Jazz SCM 代码管理系统,能够使团队共享代码更加的灵活。上文对 Jazz SCM 代码管理系统的关键概念进行了描述,以下将结合上述的概念介绍三种团队共享代码的三种常用方法:

  • 第一种方法是在 Jazz SCM 代码管理系统中最常用的一种方法,即团队中的一个成员将他的本地工作区域的改动通过检入形成新的变更集,最终提交到流中。团队中的其他成员则通过接受所产生的新的变更集到自己的存储库和本地工作区域,查看和使用新的代码。
图 2. Jazz SCM 元素关系图
  • 第二种方法是基于 Jazz SCM 代码管理系统的特点的一种方法,即团队中的一个成员将自己代码的流向目标更改为团队中另一个成员的存储库,当新产生的变更集被提交时,将最终会流向另一个成员的存储库,此时这位成员可以通过接受新的变更集将代码更新到自己的本地工作区域中。这种共享代码的优势是在最大程度的避免代码冲突的同时,又不影响团队中成员的工作。若团队中几个相关联的任务同时在进行时,可以采取这种共享代码的方式,由一位成员最终提交所有更新的代码。
图 3. Jazz SCM 元素关系图
  • 第三种方法是在一些特定场景中所使用的方法。当团队中的某一个成员网络连接出现问题时,就无法在线查看和更新代码。此时另一个成员可以对所有新产生的变更集创建一个补丁,此补丁包含了变更集中的所有内容,并存储成一个补丁文件。当出现网络连接问题的成员拿到这个补丁文件后,就可以及时的更新自己本地工作区域的代码,以便继续自己的工作。在 Jazz SCM 代码管理系统中,创建变更集补丁如图 4 所示。
图 4. 创建变更集补丁

当获取变更集补丁后,可以通过图 5 所示方法接受补丁来更新本地工作区域中的代码。

图 5. 接受变更集补丁

第四部分代码版本冲突的产生与解决方法

代码版本冲突是在使用代码管理系统时常见的问题,在 Jazz SCM 代码管理系统中也不例外。当你对某个文件完成了改动,将相应的变更集检入到存储库中但并没有提交到流中,此时另一个小组成员在你之前已经提交了他对此文件的修改,如此便产生了代码版本的冲突。在冲突被解决之前,你将不能成功提交代码。在 Jazz SCM 代码管理系统中,图 6 中的红色标识表明此变更集中包含的文件发生了代码版本冲突的问题。

图 6. 代码版本冲突

当遇到代码版本冲突时,在 Jazz SCM 代码管理系统中,有多种解决问题的方法。以下将介绍几种常用的方法。

  • 删除产生冲突的变更集,接受已提交的代码,再次提交需要改动的代码。这种方法前提在于需要改动的代码量或者文件数量比较少,并且需要先备份本地修改的代码,以防由于删除操作而丢失已改动的代码。
  • 在发生代码版本冲突时,依旧选择接受已提交的代码。当选择此方法是,Jazz SCM 代码管理系统将提供自动解决冲突的方法,当选择自动解决选项时,将弹出一个窗口如图 7 所示。
图 7. 自动解决冲突弹出窗口

如果选择稍后解决,代码冲突的文件依旧会保留。当选择自动解决后,会出现两种情况:一种是冲突会成功被解决,并在本地形成了新的变更集。对于已解决的冲突,你可以检查新产生的变更集是否包含你之前的改动,当确认没有问题后,便可检入和提交此变更集;另一种情况则是通过自动解决后,冲突依旧还存在,如图 8 所示。此时则需要通过编辑器比较并进行手动的解决冲突的问题。手动解决冲突视图如图 9 所示。

图 8. 未解决冲突视图图 9. 手动解决冲突视图

当手动解决代码冲突后,与自动解决冲突一样,会产生一个新的变更集,如图 10 所示。在检查此变更集内容无误后,便可以提交此变更集。

图 10. 手动解决冲突视图

以上方法只是对通常所使用的解决冲突的方法进行了介绍。在实际工作中,代码版本冲突和解决的方式也会是多种多样的。通过很好的利用 Jazz SCM 代码管理系统,可能会有更多以及更好的解决代码版本冲突的方法。


第五部分多个流的并行开发实践

在一个团队中,经常会在同一个实践阶段中,对多个任务进行并行开发。在 Jazz SCM 系统中,我们可以通过流与基线相结合的方式来解决并行开发对项目管理以及代码版本管理的问题。

  • 关于流的定义和分配。在对多个任务进行并行开发时,可以对相应的任务定义相应的流,这样不仅能够更好地分离和标识了每一个任务,同时也使团队间的工作相对独立,将相互影响降到最低。同时不同流之间的代码也可以更加方便地相互引用。
图 11. 主干流与分支流结构图

如图 11 所示,一个团队无论是项目开发或者是代码管理,在使用 Jazz SCM 代码管理系统时,都会有一个主干流。在主干流中保留的代码版本,一定是最新版本的代码。当由于项目需要,会有项目维护或者多个不相关的需求同时进行开发时,此时就可以新建分支流来进行开发的代码版本维护。但当分支流的任务完成后,需要做的一件事便是将代码同步到主干流。

  • 关于基线的定义和分配。对于同一个组件,当进行多个任务并行开发时,需要分配到不同的流中。如上文所述,在每一个流中会为此组件创建一个新的基线。基于不同基线的组件中包含的代码,会因为不同的任务而存在差异。当构建项目于不同的更新时,可以选择不同的基线。同时也可以选择不同的基线去查看相应任务的状态和结果。

图 12. 中描述了在多个流开发中基线的定义和分配。在主干流中,时间点 1,时间点 2 和时间点 3 分别是项目上线的时间。

  1. 分支流 1 的主要作用是作为项目上线后对项目的维护。当项目在下次上线前发现问题时,代码将在分支流 1 中进行修改,此时创建了基线 1.1 来对代码进行维护。当项目中发现的问题在时间点 1.1 被解决后,需要将改动的代码同步到主干流中。分支流 2 与分支流 1 的作用基本相同。
  2. 分支流 3 的建立,是在经历了时间点 2 项目上线后,有一个新的需求需要进行并行开发,并且要先于时间点 3 进行上线,此时主干流中同时开发着其他的需求。当创建了分支流 3 后,基线 2.2 同时被创建,用来维护新需求的代码维护。当项目在时间点 2.2 上线后,需要将代码同步到主基线中,以保证在时间点 3 上线的时包含了时间点 2.2 上线的所有内容。
图 12. 多个流开发基线定义图

总结

Jazz SCM 系统在代码管理和团队工作中有着很强大的功能。本文提及的内容是根据实际工作中的经验所总结出来的一些经验,也是使用 Jazz SCM 系统不得不知道的一些关键的内容。读者可以通过本文章,更清晰,更全面的了解和使用 Jazz SCM 系统。更多关于 Jazz SCM 的内容和功能,可以在平时的工作中通过实践和查阅资料的方式获得。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
  • 访问 developerWorks 社区上的 Jazz 技术小组,这里汇集了丰富的 Jazz 平台中文技术资源。 您可以通过这里了解更多关于 Jazz 平台和 Jazz 技术发展趋势的最新信息。
  • 加入 IBM 软件下载与技术交流群组,参与在线交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=823557
ArticleTitle=使用 Jazz SCM 你必须知道的 5 件事情
publish-date=06292012