ClearCase用于源代码控制?

Man*_*noj 5 svn version-control clearcase

我从未使用过ClearCase,但使用过Subversion并在短时间内使用Perforce.我们公司的IT部门正式支持ClearCase,有些人在其中检查了代码,有些人将其用作备份存储.

我仍然未决定天气使用ClearCase本身或使用Subverison设置我自己的存储库.它将是两个或最多三个人的开发团队.从我听过的人那里,我认为ClearCase很复杂,不值得学习,因为它可能无法提高生产力.这是真的还是错的?

谢谢...

Jar*_*red 4

假设您仅限于您提到的两个版本控制系统 (VCS),Subversion (SVN) 几乎在各个方面都会更清晰、更容易且得到更好的支持,直到您达到必须支持多个分支的地步。

当您需要将代码(例如错误修复)合并到多个版本中,支持任何规模较大的功能的并行开发或由比 ClearCase 稍大的开发团队进行并行开发,更具体地说,在分支中开发并将它们轻松合并在一起的能力,将所有额外的痛苦和并发症都是值得的 - 特别是如果 ClearCase 已经为您管理的话。

经验

我曾与 1 个人(我)到 400 多人一起使用过 ClearCase,它有许多日常烦恼、可用性问题和故障,但它始终使我们能够一起完成工作。ClearCase 安装始终都有专门的全职管理员。

我自己以及与其他人一起使用过 Subversion,它每天都运行得很好(除了我之外没有管理员),但它偶尔但始终会成为一个重要的挫败感来源,因为它不能处理任何重要的分支和合并情况。

为什么SVN不支持并行开发和分支?

SVN 在支持并行开发线方面失败了,因为它对合并分支的自动化支持非常弱。相比之下,我在这里写的所有其他 VCS 都对合并分支有很好的支持;对于常见情况,这是一个零努力的操作。

分支是版本控制系统模拟人类生活中并发性的一种方式(例如,两个开发人员并行处理两个不同的问题,或者一个开发人员同时打开多个问题)。但是,如果你不能轻松地将每个人的工作组合成一个连贯的整体,那么分支是没有用的!

分支可以显式发生(因为它们由 VCS 命名和理解),也可以隐式发生(作为文件的正常副本或签出)。SVN 两者都支持,但在 SVN 中,分支通常以隐式有限的方式完成。每次签出都是一个分支,但所有分支在每次提交/更新时都被迫同步。发生这种情况是因为 SVN 不支持显式分支的简单合并,因此很少创建显式分支。

由于您被迫在每次提交时彼此同步,这会降低团队内潜在的并行性。它还会导致一些不太理想的开发实践,因为您无法有效地使用版本控制系统来满足您自己的日常开发需求。最终很难在自己的个人分支中尝试不同的想法,并且在完善功能时无法进行多次提交。您也更有可能过早提交并最终破坏其他人的工作,直到您在上次提交中解决问题为止。

另一个主要问题是,由于合并显式分支没有得到很好的支持,SVN 在帮助您在人员之间和分支之间移动代码更改方面做得很差。想象一下尝试修复发布分支和开发分支中的错误;或者想象两个开发人员正在开发一个相关的功能,他们都需要彼此进行更改,但仅限于受控点。使用 SVN,您可以完成这些任务,但 VCS 几乎无法为您提供帮助,您必须准备好手动准备和维护补丁或发送文件。

在其他 VCS 中,您可以要求 VCS 将包含错误修复或功能的分支合并到各种其他分支中。最终,所有这些分支(它们本身包含其他分支的内容)都可以合并回主分支。通常情况下,大部分内容将由 VCS 自动且正确地处理,而 SVN 具有这种自动灵活性和并行性几乎是不可想象的。

大型团队确实可以在没有自动合并的强有力支持的情况下完成工作,但这给个人以及团队组织、沟通和流程带来了更大的负担。

另一方面,简单的分支和合并的缺点是,您必须有组织且严格地定期将更改合并在一起,因为它不再自动发生。

其他选项

现在,如果我们退一步考虑其他系统,假设您的存储库主要基于文本并且相对较小(小于几百 MB),我建议您认真考虑使用BZR。BZR 至少与 SVN 一样易于使用,特别是如果您已经了解 SVN。从开发人员的角度来看,它在所有重要方面至少与 ClearCase 一样强大;它支持多个开发流(分支),并为将它们合并在一起提供了良好的支持。同时它可以根据需要支持集中式开发。

虽然我没有这方面的经验,但我还应该提到,您可以使用 BZR 工具通过bzr-svn访问 SVN 服务器,这可能会给您带来 BZR 的许多好处和合并功能,同时仍然具有托管代码的优势在广泛理解的 SVN 平台上。

虽然我刚刚建议了 BZR,但在开源分布式版本控制系统 (DVCS) 领域,许多人似乎都在使用GIT。但我并没有建议这样做,因为它迫使来自 SVN 背景的用户面临更陡峭的学习曲线,并且我认为许多团队更喜欢 BZR 更好的 Windows 支持和易用性,而不是 GIT 的可扩展性和速度优势。

如果您选择使用 BZR 或 GIT 之类的 DVCS,您可能不需要太在意开始使用哪种 DVCS。目前广泛使用的系统都支持相互之间的导出和导入,并且至少都可以从SVN导入。