SVN用户学习ClearCase的快速方法

12

到目前为止,我一直在使用SVN,现在需要从开发人员的角度快速学习ClearCase。有没有好的资源可以供参考?谢谢。

-- 补充 --
SVN的概念/术语(例如repository、working copy、trunk、branch、tag、checkout、commit、update、revert)与CC之间是否有相应的映射关系?根据最初的阅读,我列出了以下内容。

Repository => VOB?
Working copy => 快照视图(Snapshot view)?
Trunk => ??
Branch => 集成流(Integration stream)/开发流(development stream)?
Tag => 标签(Label)? 基线(Baseline)?
Checkout from repo as working copy => 从VOB作为快照视图检出(Checkout from VOB as snapshot view)?
Commit from working copy into repo => 从快照视图提交(Checkin from snapshot view into VOB)?
Update => Rebase?
Revert => ??
?? => Deliver

据我所知,CC具有其独特的概念,因此我无法确定最接近的映射关系。

2个回答

14

你可以从阅读我的SO回答开始:

你需要知道的两个主要区别是:

  • ClearCase以文件为中心,而不是以存储库为中心,这意味着你会得到只读文件,你需要逐个检出才能修改(并且你也需要逐个"提交"(checkin)):这里没有全局工作空间版本。

  • ClearCase将分支视为真正的元数据,而不是作为一个“目录”,其中有一个廉价的副本: 没有一个名为分支的“目录”。


说得简单明了,快点:
  • Repository => VOB:
    是的:VOB 只是另一个版本库(Versioned Object base)的术语。它不是 SQL 数据库,而是一个旧的 Atria 平面文件库。

  • Working copy => Snapshot view?
    快照视图是最接近工作副本的访问机制,因为它会复制文件到您的硬盘驱动器上。
    动态视图实现了相同的访问工作副本的方式,但不会在硬盘驱动器上复制任何东西,这对于快速查看目的非常有用。

  • Trunk => ??
    "main":这是 ClearCase 中的主分支(ClearCase 中的每个元素——文件或目录——都至少有一个版本在 "main" 上),但实际上除了您选择的一个分支以外,没有其他的主干。

  • Branch => Integration stream? development stream?
    流不是分支。它是一个包含您需要使用的标签(基线)列表的元数据。只有当您选择使用 UCM 时才是如此。否则,分支是您可以创建的任何分支(mkbranch myBranch)。
    流可以用作创建以其命名的分支的模式:您在 UCM 视图中进行的任何检出都将创建一个以其流命名的分支。

  • Tag => Label? Baseline?
    首先,标签不是像 UCM 中一样便宜复制的目录。
    它是应用于您需要引用的任何版本的标签。
    标签(非 UCM)和基线(UCM)之间的区别在于,基线是应用于(UCM)组件(文件组)的所有文件的标签,而标签可以应用于您选择的任何元素,例如仅给定文件组的子集。

  • Checkout from repo as working copy => Checkout from VOB as snapshot view?
    几乎是这样,但快照视图的正确术语是 "更新"。
    对于动态视图,您甚至不需要更新(或 svn checkout),因为该视图是...动态的:您只需通过网络即可立即查看正确的工作副本。这只是另一种访问机制。

  • Commit from working copy into repo => Checkin from snapshot view into VOB?
    不完全相同,因为提交将涉及所有修改的文件,而 checkin 将逐个文件进行(即使 ClearCase 7.1.1 引入了 "atomic checkin" 的概念:请参见 checkin man page)。

  • Update => Rebase?
    不是:在快照视图中表示更新(在动态视图中什么也不需要,因为它是动态的:任何使用类似选择规则的其他视图中进行的更改都将立即在您的视图中可见)。
    Rebase 是从父流到子流的分支之间执行的 UCM 合并。最终,它只是一个合并。

  • Revert => ??
    不太简单...这是一种 substractive merge

  • ?? => Deliver
    Deliver 和 Rebase 只是在 "源" 分支和 "目标" 分支之间


我刚刚了解到集成流和开发流。我理解它们在用例方面的区别,但想知道它们在ClearCase中的技术实现是否不同。以SVN为例,我们可以有版本分支(即2.x、3.x)和开发者分支,但SVN将版本分支和开发者分支视为基本相同。 - shiouming
@shiouming:对于SVN,版本分支和开发分支都只是廉价复制的目录。对于CC,积分流和开发流都是流(标签列表):它们扮演你想让它们扮演的角色。唯一的区别是:当你创建一个UCM项目时,你需要至少一个流(按照惯例称为“集成”流),然后你可以(但不一定)创建一个或多个子流(“dev”流)。 - VonC
我会说回滚类似于ClearCase的取消检出。不过我只使用过动态视图,所以不知道在快照视图中是否也可以这样做。 - Michael Munsey
@Michael:如果svn revert是指取消本地(未提交)更改,那么是的,你是正确的,它就像是cleartool unco(快照或动态视图:同样的概念)。 - VonC

1
你需要知道的主要事情是,你如何使用SVN,就是在ClearCase中所谓的“快照视图”。除此之外,ClearCase还有很多功能,比如动态视图、活动、派生对象和自己的构建系统。我曾经工作的公司选择了ClearCase,但没有人使用这些功能。另外,如果你连接的服务器不在你的办公室,它也不会真正起作用。
我看到的大部分ClearCase材料都集中在这些其他功能上,所以我会持有一些健康的怀疑态度。

是的,我知道ClearCase有快照视图和动态视图。 - shiouming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接