SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9406|回复: 2

[推荐] 从传统的SVN转向基于RTC的协作化软件配置管理

[复制链接]
发表于 2011-6-23 00:07:28 | 显示全部楼层 |阅读模式
本帖最后由 技术狂人 于 2011-6-23 00:12 编辑
! ~% S' w4 p0 q5 C" K7 D% V) O3 f; h$ [/ \; e6 H
引言% }( j3 m" X1 ?9 d: w4 }
Subversion(SVN)是一款众所周知的开源的传统代码管理工具。由于其安装和使用简单的特点,能满足基本的代码管理需求,所以被广泛使用。IBM Rational Team Concert(RTC)是构建在 IBM Rational 面向软件交付技术的下一代协作平台 Jazz 平台上的第一个商用产品、一个协作式的软件开发环境,它包含了集成的源代码控制、工作项管理和构建管理等功能。RTC 可以说是一款强大的跨时代的开发管理工具。从其名字中我们就可以看出,它不光是针对代码管理,更注重于将代码管理集成到整个代码的开发周期和团队协作中去。作为产品级开发管理平台软件,有其创新的代码管理的理念及独特实现方式。) }$ h6 K0 L; s. {1 k
$ f( E' h, y9 M7 h
本文将面向熟悉 SVN 的 RTC 普通用户,介绍了如何从传统的 SVN 代码管理平台向 Rational Team Concert 2.0 进行迁移,和 RTC 的代码管理理念和方式,以及一些笔者在 RTC 实践当中的小技巧。4 y& z/ T1 o' R- u! O

. ]; N. n  X( Z3 d* T& {, W在做代码管理迁移前,首先要理解 SVN 和 RTC 在代码管理中一些基本元素和概念的差别,以及两者之间的相似之处。* j0 B: K* u% v* D% l) ~) Z( W


( F& Q: _4 D6 P2 kSubversion vs. Rational Team Cconcert 源代码管理中的差异
( Z8 M3 f7 k$ r0 NCheck-In/Out 的基本单位$ [0 i& X' g4 c# c& n# F
SVN 中,文件是最基本元素,即使当你对一批文件进行 Checi-In/Out 操作时,实际还是对每个文件进行 Check-In/Check-Out。
, Q) T0 I! `7 V, Q8 jRTC 中,是以 Change-Set 为最基本单位进行操作。如图 1 所示在一个 Change-Set 中,可以包含若干文件和目录。4 h/ X' C- i: |) b4 b

* q& b6 Z8 z( z& @图 1. 在 RTC 中,是以 Change-Set 为最基本单位进行操作
2 Q4 z% m0 i) O: x2 C, |" d- o4 K: k" C' }
( }0 V- Q8 q2 j, h
RTC 中的代码变更是一个变更集的概念,以一批文件或目录的变更作为一个变更集 Change-Set 来进行管理。这一特性将贯穿到整个 RTC 的代码管理中。, I" |5 r. w8 Q1 D6 d' T
2 `; |+ x$ ~# k  z: Q, D8 V2 K. U
Check-In/Out 控制环境0 P+ M& M4 I7 r7 Y2 H
SVN 中,以命令行方式,或者借助于第 3 方的软件,类似 SmartSVN,TortoiseSVN,RapidSVN 等进行代码的 Check-In/Out 操作。当然也可以通过一些插件与流行 Eclipse 开发环境集成在一起。3 x8 L4 S- Z6 }# \/ \
RTC 中,则与 Rational 系列软件开发环境(Eclipse)集成在一起。将代码管理控制与 Rational 系列开发工具(Eclipse)紧密集成在一起,将充分发挥 Rational 系列软件套件的优势。+ n# S& o. U  L* g

% q1 p: h+ X  s- o/ Y# vCheck-In/Out 版本控制  I6 ~- N) t0 f  _* T6 a8 y2 _$ G3 |
SVN 中,每次 Check-In 都会生成一个独立的版本号。会给每个 Check-In 的文件或目录打上同一个版本号。Check-Out 时,可以指定版本号进行 Update。; ^) Q" t5 p! F! A) b
RTC 中,没有了这个版本号概念,这是个区别与以往传统代码管理工具很大的特征。对于如何通过版本号来追溯以前的修改,RTC 中同样提供了 Show History 的功能,如图 2 所示,任何一次的变更集,都可以追溯的到。可以通过 History 来 Discard 任何一次 Change-Set,来回滚到之前的版本3 }/ u: F8 s+ f
& P* |/ n; t8 n) D
图 2. 变更集都可以追溯的到
. O' A- ~2 O  g& p% d1 |7 O
: T  x8 H. @% Y7 N9 O( n
- u" {6 o+ p* R$ o% w+ I3 G4 _; A对于其他开发者 Check-In 的 Change-Set 可以有选择性的更新到本地开发环境。如图 3 所示对于其他开发者的提交的 Change-Set,开发者在 Accept 到本地开发环境之前,可以查看到作了什么修改,可以选择立刻 Accept 到本地开发环境,或暂时不接受以不影响本地开发,以后再 Accept 下来做 Merge。3 @2 M  v9 p3 r; C. I
4 p' r, x/ e2 S; {/ Y- I$ \0 }
图 3. 其他开发者的 Change-Set 可以有选择性的更新到本地开发环境
6 n! n1 @/ Q- n& G' d / k/ [" |6 v) ?7 I4 J

# y$ M% V+ x/ s0 o, A; X4 W5 |RTC 独特的 Change-Set 概念可以让开发者更好的处理每次代码的变更,其灵活性这在以往传统的代码管理工具中,是无法做到的。  O% V& Z* A- K- k  E

7 v% R6 |3 H2 u4 Y! M7 q7 \Tag vs. Base-Line 的差异
2 N. a  \+ i8 S, p) S3 m/ H说到这里不得不提一下,对于大的变更的版本控制了。
2 L8 w' ^0 L: K1 W5 y/ YSVN 中,可以通过对当前的代码打 Tag 来进行一次大的变更的记录,其实质就是在服务器端做一次镜像的 Copy。9 H; O4 V3 B& }5 d0 e
RTC 中,可以通过对选择一些 Change-Set 集来进行做 Base-Line。其灵活性就在于,你可以根据不同的需求对 Change-Set 挑选,来做一次大的变更的记录,而又不会影响现有团队的开发。而且不同的 Base-Line 可以是有重叠的 Change-Set,也可以没有任何联系。
4 {' U! w) Q# t) o
) N+ g( n3 P( E* _4 y/ d7 fRTC 以其特殊的 Base-Line 管理方式,极大的方便了对于不同目的的大变更的记录以及追溯。这也是目前其他市场上任何代码管理工具都无法做到的。& r+ F; U, g1 W. {
0 E- W7 q6 i4 M) Q) p
代码变更与 Bug Tracking 的相结合。) c; ~- k8 P2 z# h2 A
SVN 中,本身不具备这一功能,但可以使用第三方的工具,例如 JIRA 的 SVN 插件,可以将 Bug Tracking 和代码相结合。9 ~+ @1 D1 s! x7 q
RTC 中,本身就已经集成了 Bug Tracking 功能。可以在 RTC 中,建立类似于 JIRA,Maintis 等 Bug Tracking 工具的 Work Item,将代码变更集(Change-Set)与 Work Item 做关联,可以方便的查阅。如图 4 所示' r. w3 {' S* I1 ]( ?1 L# `

, ]" F: x: A4 @图 4. RTC 中集成的 Bug Tracking 功能& N" y7 k  ^7 V- R% d& s% a

; V6 Y; Y; \- ^4 H9 }4 t ! ^5 |9 J- M/ ~  b
RTC 中内嵌了 Defect 管理和跟踪功能,可以和所作的 ChangeSet 作无缝关联集成,使其免去了另外构建 BugTracking 系统的成本,也使其超越了市场上任何一款商用代码管理工具。
$ A& X: N+ Y6 r) Q: m  A综上所述,如表 1 我们可以罗列出 2 者的差别
2 a: F6 ]" D# {" v* _! Y  Q
, _: c; w; m, X! q; Q表 1. SVN 和 RTC 的差异
* \; j/ d* w9 q! a
比较项目SVNRTC
对于变更代码的控制的便捷性一般
版本控制的便捷性一般
与 Bug Tracking 的结合无(依赖第三方)

) o1 Z2 z( E& K& v当然了,作为 IBM 一款明星产品软件,RTC 的功能远不只这些,这里只是阐述了针对代码管理这块相关的一些功能与传统工具的差异。/ p+ ?3 c' Z! s2 K% q) b8 ]- F
RTC 确实是个好工具,对于已经在用 SVN 的用户,如何把 SVN 的代码搬到 RTC 上去,主要有 2 种方法来实现。+ b& Z& c0 I4 y  H1 ~# }
关于 RTC server 的构建就略去不说了,大家可以参考 RTC 的文档,这里只针对代码迁移怎么实施这块儿简单向大家介绍。
( [# \# d# g& S4 z$ d. `
" F4 B+ \& ~$ t
( c7 `6 o+ q& }: F- i+ ?4 k

5 a+ R; X) [: x& u: z+ m" m: p将源代码从 Subversion 迁移到 Rational Team Concert 的两种方法
: N: x  r$ Q3 u( G" I使用 RTC 中提供的 SVN 接口5 x$ x8 l. a$ B9 Z
步骤 1:将现有的 SVN 的代码文件导出成 dump 文件。如图 5 所示:1 h9 r# r4 K! J0 Z

4 |, h2 C5 {& y+ k/ @图 5. 步骤 10 ?% L# F' R1 @1 I9 m& @; }% L

- f/ r$ m3 N* ^! i5 q! Z( K
' H2 X2 a6 }& x- R! v3 i步骤 2:在 RTC 中,选择 File/Import,如图 6 所示选择 SVN Dump File,按 Next。
7 r2 i3 w! W7 L! _5 x1 N2 m" f! R! I& A; R8 w1 o
图 6. 步骤 2
3 B5 t6 {- R3 e+ k- M3 W% e$ W$ P

/ C' Y, C- b- U  w( [步骤 3:根据 Wizard 提示,如图 7 所示选择刚才从 SVN 导出的 dumpfile,按 Next。9 ~" X, N" S1 p) ]5 Q3 y+ l# r9 @; T
$ U% q: j5 M( c0 ^1 o6 L/ s
图 7. 步骤 3+ T. U! a5 I! F" G" u+ i, U2 i' G
. O# I$ J- E6 {1 D  e7 q( R4 p. Z
/ [. o( v; Y' l3 y
步骤 4: 如图 8 选择需要导入的 Component,按 Next。! @& z+ g1 O+ h4 x* f

$ y- L" S. M1 H9 i! t- }图 8. 步骤 4" v8 [4 Q# d/ V6 ^9 Z$ a

, V+ m7 c5 y6 Z+ q+ C* @( f$ ` 9 l5 U! p! P9 g0 V
步骤 5:如图 9 选择合适的 [Text file encoding],按 Next。9 [: ^* ^4 N" x
这里要注意 SVN 中的文件 encoding 是否统一为选择的 encoding。如果不事先统一 SVN 中文件的 encoding,否则会导致 import 失败。
0 g0 y" c& ]. N* K7 G. [这里可以在 [Revisions to Import] 选择将 SVN 中的所有 History 版本都导入,或者指定版本导入。& p* D; B% }. @4 E+ t0 P' b. o
如果不需要保留 SVN 中的 History 的话,推荐可以选择只把最新版导入。因为根据 Dump 文件大小,将所有 History 导入会非常耗时间。' l* H1 u; d; O& T/ y) t3 F

; ?/ ^" l! p, G图 9. 步骤 5
7 R6 x: k, [& }/ ]& z; h5 `/ b& l. S7 f! F0 X

8 E+ y7 g2 _* M* z1 _0 z步骤 6:如图 10 一般选择不导入 SVN 中的 User,按 Next 即可。
+ _8 u9 H5 p; D- B1 z' A7 U- \! V9 D
图 10. 步骤 6
2 \  |% ?# @6 ]( C5 `9 k3 R! D4 ]4 p5 W7 l! D  {
1 M( _  N) v5 \+ K
步骤 7:如图 11 所示,选择 Finish,导入即完成。( O* h2 |9 y) F$ e; J) I
& o! R' ~! u' y( E6 x' K$ c
图 11. 步骤 7: Q' z: ?' g% Z+ k+ a5 t
; O- l# d5 D5 G# e
, x" B& R. r" ?2 ]! {
作为新建文件导入! L& L3 d% D# i. k0 v
这种方式就比较简单了,就是将所有 SVN 的文件 Copy 到本地环境,然后将他们 Check-In 到 RTC 中。这里就不在做累赘说明了。
7 Q) t! E, p  G' \( K在正式开始使用 RTC 之前,要针对所有 Team Member 做如何使用 RTC 的培训。关于 RTC 介绍的资料有一大堆,本身 RTC 也自带了许多 Tutorial,都是很好的素材。这里就不做累赘的介绍了。下面是 RTC 使用中笔者的一些使用心得,相信会有助于增进读者对 RTC 的理解。
  p! r$ l; p3 |) K5 G  L

3 Y. p- ~% W0 PRational Team Concert 的使用心得
+ _+ X3 W* u2 ^8 W$ M/ lRTC 中的代码管理结构的规划
( z  q8 O& r$ i3 n2 l; ]SVN 中,目录结构一般为如下的 3 层构架。
  R9 r6 F! _5 h! p
SVN---- Trunk---- Branch---- Tag

) P  ~4 H+ g, W% {9 L! l2 x对于如何在 RTC 中进行规划的问题,可谓仁者见仁,智者见智。如表 2 首先必须要理解下面几个重要名称的概念。
- T4 e. a0 T, a# R: M. K! T
# C3 z) \, e6 C( s3 ^; I# t表 2. 几个重要的概念% y' P2 _' P' X4 e, H9 Z# P
名称含义SVN 中类似项
Stream存储代码的流,内含多个 Component。Trunk/Branch
Component存储代码文件的最小容器,可以按需求建多个。' @8 T$ ^: W- I0 h- J
Workspace建立用于开发的 Stream 的镜像代码
  p* u1 T; f( n+ n; Q- G
Base-Line基于 Change-Set 大变更记录Tag
Snap-Shot以 Stream 为单位的大变更记录Tag

7 I' g. Y6 O% T+ M实际使用当中,Stream 和 Component 可以灵活的按需构架,只要适合你的管理需要就可以。如图 12 为项目的不同管理目的构建了 3 个 Stream,分别为 Documentation、Main Development、Release。
6 f. D  z, B; P$ B6 n4 V% C
' r4 E( T) q( v  H  K" \  I图 12. 为项目的不同管理目的构建了 3 个 Stream
: u2 D/ ^+ F8 C$ X, Q: b' L
7 i5 d( R) w( {- |* Z0 ?" e & g4 p5 E# g  v8 m& S' h- T9 J& V
RTC 代码流转过程。
; R: H  z" i; o% e$ w- F6 e9 a下面这张图 13,是大家所必需理解的。不同于 SVN,在 RTC 中,为每个开发者在 RTC Server 端建立了 Personal 的 Workspace,所有的变更在 Local 完成后,将先 Check-In 到 RTC 服务器上 Personal 的 Workspace。然后通过 Deliver 将变更提交到 Stream 中,使其他 Team Member 可以通过 Accept 分享你的变更。) V6 j2 [8 y$ r" b. e; H% D
$ Q- \- P8 X9 B
图 13. RTC 代码流转过程2 p+ n9 i( ^0 e0 v. K
9 J5 g. h! W9 ]" r$ s
/ p+ W" F9 r; K) j9 a; [3 T% ~
整个过程简单的说就是- n7 n. d6 j/ D& H* T8 g3 T% x5 y; h
步骤 1:开发者 - 甲 Local 修改 -> Check-In -> Deliver to Stream- L  i5 U- U  ]0 q/ ]
步骤 2:开发者 - 乙 Accept(开发者 - 甲的修改)from Steam-> Load 到 Local
* C) m. V: `& o+ X4 k比起 SVN 来,当中多了一个到 Personal Workspace 的环节,而且并非像 SVN 那样 Check-In 后,就可以直接和其他开发者共享代码。8 C0 h3 _. h9 h5 {9 ?
基本操作心得5 d) e7 z- m7 d, L& L: {5 E
具体操作过程中,如何识别 [ RTC 代码流转过程 ] 中的操作呢?如图 14 所示。) U* V/ N0 D  u" w: l
) b0 _0 V5 o3 |3 D3 {' M8 j
图 14. 识别代码流转操作
! p6 A% W2 [6 q  @/ O0 ]2 V6 ^8 Q2 A9 C" i+ H

* d, c( @7 C. u  Z[Unresolved] 是可以 Check-In 的变更集
# A& L. L' H  E1 l; k, ~. `- K; Y1) 当你在 Local 更改了代码文件时,就会出现 Unresolved 目录,里面列出了所有的更改文件。
0 P: U5 A7 g7 m* K. Z如图 15 开发者可以将更改过的文件,分成几个不同的 Chang-Set 来 Check-In。% s' v3 J" {5 r3 w# [! |/ r

; p- w6 g/ x2 s! I. h* g$ L# m图 15. 分成不同的 Chang-Set 来 Check-In- a: _7 N. J$ d" x1 p
  v4 l+ R+ V3 b3 m* L) _9 i

! l9 G! a0 U1 w4 y2) 所有 Unresolved 的变更可以通过 Undo 来随时撤销。
* X; w( ~: l6 S! {3 W8 l现有 RTC 2.0 版本中,当你打开 Excel、Word 格式的文件,不对其做过变更而直接关闭,RTC 会仍然检测为变更过,实际使用时需要留意。或许在未来版本中会解决这一问题。
+ G1 I; j+ Q1 o! C7 W* A$ b[Outgoing] 是可以 Deliver 的变更集
" U9 w( k. e( J. J) g1 G3 U3) 当成功 Check-In 后,会在 Outgoing 目录中出现等待 Deliver 的变更集。
, m2 c, @; [. R7 b3 @* |4) 对于还未 Deliver 的 Change-Set,开发者可以随时再次修改,再次做 Check-In。' l& l3 E! R* X+ [6 E3 T+ N
如果用户想把这次 Check-In 的东西固定下来,再次修改的变更作为一个新的 Change-Set 的话。如图 16 可以把已经 Check-In 的 Change-Set 标记为 Complete。就可以再次 Check-In 新的变更,而又不会影响到你上次作的变更,会在 Outgoing 中出现 2 个针对同一文件的不同的 Chang-Set。这也正是 RTC 对于 Chang-Set 概念的优势体现。
" {" A& J. y8 L0 N9 q& v+ b" C7 i) m0 V' X* t3 B" U" P% j
图 16. 把已经 Check-In 的 Change-Set 标记为 Complete 就可以再次 Check-In 新的变更
7 S/ P5 ?5 ~* T  n! [! U9 C* z* W3 S% ]8 ~# f. p
. l# S( S* D! X' q: W& ~
5) 当我们做 Bug Fixing 的时候,会希望所修改的 Change-Set 和某个 Bug 作关联时,可以如图 17 所示,选择一个 RTC 中的 Work Item 来做 Associate。8 D9 ^2 h2 E) o6 v2 x# i( ]

; `1 Q4 R9 y+ _" @8 N) _图 17. 一个 Change-Set 可以同时和多个 Work Item 来做关联。
2 z6 ?0 _% q: y# Z$ i# P0 W6 |  h: P$ k: Z) H! ~
  \  ~1 g7 j: u* r7 Q! i
6) 当准备做 Deliver 的 Change-Set 与其他开发者的 Change-Set 有冲突时,RTC 中会显示如图 18,这时候可以做 Discard 自己的 Change-Set 或者作 Merge。这点要比 SVN 等传统工具更加人性化,当冲突发生时你可以事先知道,选择对应方法。
3 b% U, N- F4 {; l: {5 r* T3 m$ y9 ~1 a* Y
图 18. 冲突) P% o" D5 e6 c- ^

% C8 Y( `& Q5 G# \( Q+ J* e  t4 i  g5 t: L. q  g2 E- F6 D
[Incoming] 是可以 Accept 的变更集
0 h/ i+ l7 s8 ^7 z& {" P0 [如果你 local 已经 Load 过关于这个变更集的 Component,当你 Accept 一个变更集时,会自动 Load 到你本地的环境中去。如图 19 显示为 loaded。
: E& A, f. r: I" O& m( p, [1 N& Z6 f$ o$ W6 @
图 19. 已经加载的变更集
9 c# i/ R: b6 i) z
. c: N9 y+ Y# r
; q1 |; m# W: S- Y: |9 ?如果你 Local 没有 Load 过关于这个变更集的 Component,那么 Accept 将只是在服务器端操作。2 I5 U% z8 q8 e7 \

- ?3 \- d1 k  q- J$ \" z! H
结束语2 H; Z8 E9 L7 c0 s- k5 z3 Y/ y) D
本文通过对 Subversion 与 Rational Team Concert 在代码管理上的比较,以及一些实际使用中的经验技巧的介绍,突现了 RTC 在代码管理方面的优势,希望能吸引更多的 SVN 用户向 RTC 管理平台的转移。, |/ |: F9 o' V& _+ h: t5 e

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2011-6-23 00:13:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-12-2 17:12:18 | 显示全部楼层
请问可以实现一台SVN服务器 与另外一台 RTC服务器的同步吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /5 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2020-7-14 17:34 , Processed in 0.071123 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表