因为我目前在学习IBM Rational ClearCase方面遇到了困难,所以我想听听你的专业意见。
我特别关心与其他版本控制系统(如Subversion或Git)相比的优缺点。
因为我目前在学习IBM Rational ClearCase方面遇到了困难,所以我想听听你的专业意见。
我特别关心与其他版本控制系统(如Subversion或Git)相比的优缺点。
在我的SO答案中,你可以找到ClearCase和Git之间的良好比较:
"每个开发人员都应该了解哪些基本的ClearCase概念?",展示了一些主要差异(以及ClearCase的一些缺点)
ClearCase 最大的短板就是其老旧的"以文件为中心"方法(相对于 SVN 或 Git 或 Perforce 等"以仓库为中心"的方法)
这意味着每次检出或提交都是针对单个文件进行的。操作的原子性在文件级别上。
将此与非常冗长的协议和潜在的多个节点之间的网络相结合,从而可能导致文件服务器的速度缓慢和效率低下(这是 ClearCase 的核心问题)。
文件-每个文件的操作意味着:缓慢的递归操作(例如recursive checkout或recursive "add to source control",即使通过 clearfsimport
也是如此)。
强制使用 快速的 LAN 可以缓解这种啰嗦协议的副作用。
需要考虑的另一个方面是其集中式方面(即使可以通过其多站点复制 VOB 功能实现"分布式")
如果网络不允许访问 VOB,则开发人员可以:
如How to Leverage ClearCase’s features所述,动态视图非常棒(一种通过网络查看数据而无需将其复制到磁盘的方法),但主要功能仍然是 UCM :如果您拥有具有复杂工作流程的大型项目,则可能是真正的资产。
在这方面存在一些缺点:
在不使用UCM的情况下使用ClearCase意味着必须定义策略来:
cleartool find
”请求...不好的是,视图中的每个操作(如简单的"ls
"、检出、检查等)都会触发一个网络请求到管理视图服务器的view_server进程。
有两个选项:
第一种模式意味着:您必须自己备份正在进行的工作(私有文件或已检出文件)
第二种模式意味着:您的工作站可能不可用,您只需登录另一个并获取回您的视图即可(除了快照视图的私有文件)
关于动态视图的讨论:
除了"动态视图"方面的优点(它是动态的)和缺点(它是动态的)之外,还有一个补充。
对于一个小型开发团队来说,动态视图非常适合设置一个简单的环境,以便快速共享一个小型开发项目:对于小型开发项目,动态视图可以帮助2或3个开发人员保持不断联系,即时查看一个人的提交是否会在其他视图中出现问题。
对于更复杂的开发项目,快照视图提供的人工“隔离”更可取(只有在刷新或“更新”快照视图时才能看到更改)。
对于真正的分歧开发项目或课程,仍需要一个分支来实现真正的代码隔离(在某些时候需要合并,ClearCase可以很好地处理这一点,尽管是逐个文件)。
重要的是,你可以根据正确的原因同时使用两种方法。
注:通过小团队,我并不是指“小项目”。ClearCase最适合用于大型项目,但如果你想使用动态视图,则需要在每个分支上设置"任务分支",以便为每个分支隔离一个小型开发项目:这样,“小团队”(你的大型团队的子集)可以高效地工作,快速分享其成果。
如果在每个人都在做任何事情的“主”分支上使用动态视图,则任何提交都可能会“杀死你”,因为它可能会引入一些与当前开发项目无关的“构建破坏”。
那将是动态视图的不良使用,并且将忽略其其他用途:
直接在动态视图中开发并不总是最佳选择,因为所有(非检出)文件都通过网络读取。
这意味着您的IDE所需的dll、jar或exe将通过网络访问,这可能会显著减慢编译过程。
可能的解决方案:
成本是一个相当明显的缺点。不仅是许可证费用,而且还包括ClearCase专家的薪资成本。我知道的几乎每家使用ClearCase的公司似乎都至少有一个人的唯一目的是驯服这个难以控制的野兽。
它足够复杂,需要全职保姆照顾也值得警惕。
一个绝对的系统噩梦。 它让我希望我们可以回到VSS! (别提什么像Subversion或Git这样的现代源代码控制系统!)
基本上,它非常缓慢、复杂且不可靠。哦,我提到了它价格昂贵得离谱吗?他们唯一可能卖出它的方法是与决策者交谈,而这些决策者从未使用过该产品,也永远不会使用!我敢肯定,世界上没有开发人员会购买它。
原子提交和变更集是我对ClearCase最大的抱怨。假设您作为缺陷修复或重构的一部分检入了五个文件。但随后发现出了些问题,需要还原。要找到这五个文件以及每个版本需要用哪个版本进行还原,就会非常麻烦。但让我们退一步。你刚刚完成了编辑这五个文件,现在是提交的时间了。前四个文件都可以成功提交。但最后一个文件需要进行大规模合并。其他四个文件已经被检入。它们不等待您完成最后一个文件中必要的更改。我希望没有人更新或正在使用动态视图。连续集成构建服务器也将失败。
有时我们会创建一个全新的目录,并填充文件,但在完成前并不想将其检入。现在还很早,一切仍然不稳定,所以为什么要检查可能很快就会删除的东西呢?直到现在为止,一切都还好。现在是检入的时间了。您将新创建的文件夹添加到源代码控制中。好吧,ClearCase 不支持递归,因此只有这一个文件夹被检入。而 SVN 可以选择将该文件夹及其所有子文件夹一起添加。开发人员需要记得添加所有内容,否则会缺少很多文件。
ClearCase 拥有文件和文件夹,因此除非您首先将其检出,否则无法修改任何内容。Eclipse 插件在这里消除了很多麻烦。我无法告诉您有多少次我打开 vi 文件进行快速更改,结果发现自己忘记先将其检出。而且检出不是递归的。
没有变更集更新会非常缓慢。如果使用快照视图进行更新,则每个文件都会更新,而不仅仅是修改的文件。我曾参与一个拥有超过20,000个文件的项目。我远程登录到我的工作计算机,开始更新,然后开车去上班;喝咖啡;等它完成。这听起来可能有些夸张,但遗憾的是事实确实如此。
动态视图非常糟糕,除非你的团队非常小。如果是这种情况,那你为什么还要用ClearCase呢?我见过无数人的视图被损坏,因为有人提交了破坏其他人视图的文件。你应该总是在自己的视图上更新和合并任何冲突。这样,更改只影响你自己。使用动态视图,你不能在推回之前向下合并;你只能提交并希望成功。
我知道成本可能不是一个大问题,但是为公司赚钱的开发人员会喜欢花费5-10万美元(取决于ClearQuest许可证,这是一个常见的附加项)在有趣的活动或新设备(椅子、显示器等)上。IBM建议雇员来维护ClearCase系统。为什么不重新调整这些人的职责,让他们为公司创造收入,而不是确保系统正常运行呢?
以下是我听到的一些不换用其他版本控制工具的原因:
ClearCase唯一比其他工具做得更好的事情是对单个文件进行分支,同时保持其他文件与另一个分支在同一条轨道上。
我在Clearcase中所做的一切似乎总是很困难。而我从未对其他系统留下过这样的印象(除了可能偶尔使用CVS)。
我曾经使用过SVN、CVS、Clearcase和Mercurial。
所有我与ClearCase相关的经验都是低效、丑陋、过于复杂、缓慢、令人困惑、昂贵和不便利的。
似乎只有那些完全错了的管理者和工程师才会使用它。
该死,IBM和Rational一定有惊人的销售团队可以销售这样一个糟糕的产品。
我使用ClearCase的经历非常糟糕,我同意Don的观点,它需要一个驻场专家--不幸的是我们有不止一个。我有使用CVS和其他版本控制系统的经验,我熟悉这些概念,但我发现ClearCase文档难以理解,必须多次寻求帮助;不同的专家给出的建议相互冲突,最终导致我们甚至破坏了cd命令。即在UNIX shell中发出ClearCase命令后,“cd”命令失败并显示错误消息。
版本控制系统的基本任务非常简单。老实说,我认为只需要半打命令,使用一个与其他系统兼容的文件方案就足够了。对我而言,ClearCase看起来像是营销人员故意把事情复杂化,使产品看起来 sophisticated 和功能强大。我听说可以将其配置为以简单、安全、可靠的方式运行,但再次需要专家的服务--开箱即用的状态就像一把机械式瑞士军刀。
不支持原子提交
一旦您检入了文件,要恢复到某个状态就非常困难,因为ClearCase不支持原子提交。当检入多个文件时,每个文件都会获得一个新的版本号(类似于CVS),而不是检入本身。我认为这是一个至关重要的功能,因为您很少想要回滚单个文件,而是完整的提交操作(应该映射任务)。使用ClearCase,您只能通过使用标签来还原到某些状态。在实践中,为每个检入使用ClearCase标签是过度的,因此不会这样做。
差劲的用户界面
ClearCase Explorer的GUI简直是一个大笑话。可用性很差,看起来很丑。不提供不同的、通常必需的功能(例如递归地检入工作的文物)。使用cygwin和cleartool命令行工具要好得多,但仍有一些东西不可用,例如递归地将新文件/文件夹添加到源代码控制。如果我读到一个长达50行的脚本来解决这个问题,我就要笑翻了。
高管理成本
管理ClearCase兽很不明显或轻量化(与其他SCM系统如CVS、Subversion或Git不同)。需要投入相当多的专门的ClearCase专家来维持其运行。
性能差劲
让开发人员在与SCM工具交互时等待是最糟糕的,就像开着手刹驾车一样。它会减慢您的大脑和工作速度。获取10K件文物的新文件到您的快照视图需要大约30分钟。对于同样数量的更新(文物没有更改),需要大约5分钟。当进行反复实验并在不同的最新视图之间跳转时,需要等待很长时间。当您正在重构类型或方法的名称/移动时(可能会影响很多文件),情况变得更糟了。检出、检入和添加到源代码控制周期需要大约10-15秒,这显然是一个噩梦。
缺乏分布式开发支持
今天的软件开发往往是分布式的(开发人员遍布全球,共同处理同一个产品/项目)。ClearCase显然不适用于这种情况,因为它不适合离线工作。在执行检出操作(编辑文件/文件夹之前的操作)时需要网络连接。虽然可以使用劫持选项,但这只是一个临时解决方案而非功能(你基本上只是在文件系统上解锁文件)。如果你的开发站点远离ClearCase服务器,则检入/检出延迟甚至可能会增加到无法使用。有一些解决方法,例如使用ClearCase Multisite(scm数据库副本技术),但需要额外付费并且不容易管理。可能是有史以来最糟糕的软件。我不会为任何使用理性工具的公司工作。除了CC在动态构建过程中频繁地导致我的工作站崩溃之外。当你正在将某些东西推送到源代码控制时,如果CC像它擅长的那样崩溃会发生什么?你的代码是否被放在lost+found里,或者备份在其他地方?没有,它永远消失了。所以,如果你不得不使用这个昂贵的巨型软件,一定要保留一切的副本。好样的Rational/IBM。你成功地捕获了源代码控制最重要的部分-可靠性。慢慢死去吧。