【问题标题】:ClearCase vs. Git version control [closed]ClearCase 与 Git 版本控制 [关闭]
【发布时间】:2011-07-29 19:14:33
【问题描述】:

我们正在使用 multisite ClearCase 存储库,并且我们经常需要合并和构建我们的系统。这种合并和复制需要将近三天的时间才能跨站点可用。因此,为了提高效率,我们计划转向 Git 版本控制。如果我们从 ClearCase 迁移到 Git,您能否告知我们可能遇到的潜在缺陷?

【问题讨论】:

    标签: git version-control clearcase


    【解决方案1】:

    @zzz777:您的问题是以 ClearCase 为中心的观点提出的,以至于以前从未使用过 ClearCase 的人无法理解。事实上,Git 比 ClearCase领先光年,而商业 SCM 需要赶上 OSS 系统。

    我有使用 ClearCase 和 Git 的经验,我可以告诉你,ClearCase 的查找合并(错误)功能是其基于版本控制文件的(根本上被破坏的)设计的结果,但在 Git 中你不需要将共享分支合并到您的私有分支的这种原始工具。 ClearCase 是面向文件的,而 checkin-s 是基于文件的,这就是为什么您需要 Find (files) to merge 实用程序,但 Git 是基于提交的,这是正确的模型,因为当您修复问题或实施功能,整个变更集或没有一个是唯一有意义的选项。

    Git 有一个非常强大的合并功能,它做正确的事。有两种方法可以满足您的要求(将您的私有分支更新为共享分支 + 您的更改)。

    最明显的是进行合并,所以在你的私有分支上你只需这样做:

    git merge sharedbranch
    

    然后,如果存在冲突(确实比 ClearCase 中少得多),您可以解决它们并

    git commit
    

    就是这样。作为奖励,因为 Git 在本地拥有所有历史记录,所以您不必浪费无数小时,如果您有很多文件,就像您在 ClearCase 中所做的那样,合并速度非常快,当 ClearCase 在动态视图中执行合并 10 个文件,Git 可能会轻松完成 100 个文件的合并。

    使用 git merge 意味着您保留历史,如果您的历史在合并之前看起来像这样:

    o---1---2---3 (sharedbranch)
     \
      a---b---c (privatebranch)
    

    合并后会是这样的:

    o---1---2---3 (sharedbranch)
     \           \
      a---b---c---m (privatebranch)
    

    这会保留您的更改历史记录,并允许其他人查看您的工作。

    请记住,这些不是文件修订历史。这些如果树历史,这是唯一有意义的存储历史,即使分支仅相差一两个文件。您要保留的状态是树,而不是一个文件。

    第二个选项是使用 rebase,这意味着你让它看起来好像你的更改是从共享分支上的最新代码开始的。

    您使用的命令(同样,在私有分支上):

    git rebase sharedbranch
    

    历史树将从:

    o---1---2---3 (sharedbranch)
     \
      a---b---c (privatebranch)
    

    到

    o---1---2---3 (sharedbranch)
                 \
                  a'--b'--c' (privatebranch)
    

    因此,如果您给 Git 一些时间来理解它,并稍微使用它,您就会发现 Git 模型有多好,而 ClearCase 模型有多破碎。

    顺便说一句,ClearCase 中的邪恶孪生问题在 Git 中根本不存在,因为 Git 不跟踪目录(相信我,你确实不需要需要那个)。

    另外,如果你曾经有一个配置规范,它有几个分支,有点复杂,并且你将文件从一个分支迁移到另一个,你可能知道配置规范中规则的顺序有多重要,并且因为配置规范是“错误的”,所以看到旧版本的文件是多么令人沮丧。由于其基本设计,ClearCase 中会发生这种情况,而且不用说,这种废话在 Git 中不会发生。

    因此,总而言之,Git 没有诸如“查找合并”之类的原始工具,因为它不需要它。它具有实际有效的高级模型和高级合并模型。与 ClearCase 相比,它快如闪电(CCRC 静态视图或动态视图,随你便便)。

    ClearCase 唯一可能具有优势的地方是动态视图的即时更新,但这也可以通过您可以比更新配置规范更快地键入 git checkout branch 的事实得到缓解.

    【讨论】:

    • 非常有趣。 +1。我很少遇到有实际使用 ClearCase 和 git 经验的用户。
    • 与 Git 相比,ClearCase 完全是垃圾。我仍然对它做噩梦。 ClearCase 不是 VCS,它是一场灾难。
    • @user2061057 我使用 ClearCase 已经 2 年了,我喜欢它。当一个人遇到问题时,Git 会做噩梦。 Mercurial 比 git 更容易使用。
    【解决方案2】:

    我在专业的混合能力办公室遇到的问题:

    1. 可变历史。 你可以用 Git 做一些非常愚蠢(但功能强大)的事情。这可能会导致源丢失。
    2. 自动合并。 这是 Git 的最大特点。 但是,我们不得不关闭开发一周才能找到丢失的源代码。 MSVS 有一个令人高兴的问题,即随机更改行尾,如果您不定期从存储库中提取,它会变得混乱,并且更改会丢失。
    3. 推/拉订单。 ClearCase 会为您处理日期排序和历史记录,但 Git 会忽略它。
    4. 暂存。 ClearCase(至少是 UCM)为您处理分支推广和其他事情。吉特没有。您必须谨慎处理。
    5. $ID$ Git 不存在。必须手动处理来自实际版本的版本跟踪和通过了解源文件的版本来发现问题。 (我不确定您的发布流程是什么。)

    对于您的最终代码存储库,我可能会建议一个发布存储库,可以是另一个源代码控制系统或单独的 Git 存储库,它是受管理的并且只接受拉取。

    我目前正在将 Git 用于我的个人项目,这很好。但是,在一个拥有各种编辑的混合能力的房子里,我会很小心。你真的可以在不知不觉中使用 Git。

    Mercurial 或 Bazaar 我都没有使用过。随着一些问题的消失,这些可能值得关注,并且它们具有缓解上述一些问题的功能。

    【讨论】:

    • +1 对于可变的历史,但是你可能会因为提到这一点而受到抨击。
    • $ID$ 确实存在于 git(或者,更确切地说,“Id”。参见 git-attributes)。但是:gelato.unsw.edu.au/archives/git/0610/28891.html
    • 1) 你真的必须搞砸一些东西才能失去源。 git reflog 将向您显示发生的每个提交。如果您丢失了源代码,那么您可能需要重新培训开发人员。
    • 大多数 git 服务器都具有锁定分支的能力,因此等级和文件开发人员只能对这些分支进行快进推送(无强制推送)。这样共享存储库就没有可变的历史记录。
    • 我建议的一件事是始终让开发人员团队通过可审查的拉取请求进行工作。它限制了对“主”存储库的潜在损害,并鼓励开发人员在提交的代码上进行交互。 GitHub、Atlassian Stash 和 Gitlab 等工具对此很有帮助。
    【解决方案3】:

    我曾使用过 Git 和 ClearCase,一旦您学习如何使用 Git 然后进行切换,您将永远不会回头。确保您有时间培训您的开发人员——这应该是您的首要任务。 Git 是一种与 ClearCase 完全不同的 SCM 方法。

    需要考虑的一些事情(可能的缺点):

    1. 您将需要一个真正的 存储库管理员,而不仅仅是监视源代码的人,而是了解 SCM 实际工作原理(不仅仅是 GUI 向他们显示的内容)并能够处理您的分支模型(参见 #2)
    2. 采用/开发稳健的分支模型。一个很好的例子,我用过的一个例子是 A successful Git branching model
    3. 您将不得不投入大量时间来帮助您的开发人员重新学习他们认为了解的有关使用 SCM/与 SCM 交互的所有知识。

    如果您能克服上述三个问题,那么就没有什么坏处了(#3 是最难的)。至于@PAntoine,这些问题中的大多数都与培训有关——#1 必须做出一个非常糟糕的决定才能丢失源代码。 git reflog 将为您提供对存储库的每个提交的访问权限。销毁源的唯一方法是通过git reflog expire --expire=whatever refs/heads/master、git fsck --unreachable、git prune 和git gc,它们只能由存储库管理员处理——然后是开发人员不提交其源的普遍问题(天啊!)

    【讨论】:

    • ClearCase 的 find-merge 功能怎么样 - 这是我们公司搬走 clear case 后我最想念的功能。假设我的项目是 100K 文件。我创建了私有分支并创建了 20 个分支。三周后,我想从官方开发分支中获取更改-此操作在 ClearCase 中轻而易举-更改配置规范中的时间戳,运行查找合并,如有必要,对文件子集执行合并,您就完成了。 git可以吗?
    • 您是否在询问如何将这 20 个来自官方 dev 分支的文件合并到您在私有分支(现在是三周大)上的 20 个文件中?
    • 我想知道在我的私有分支中挑选我没有接触过的 99,980 个文件的最新版本并找到在开发分支和私有分支上都已更改的 10 个文件是多么容易。然后在接下来的几周内再做一次,然后再做一次。 ClearCase 做得非常好。 SVN 让它变得异常困难,那么 git 呢?
    • 副手我不知道如何使这个过程变得简单。如果总是更改相同的文件,那么它听起来更像是一个功能/修复分支应该每 x 天/小时/月/无论您喜欢什么,都应该不断集成(合并)。
    • 你读过git-scm.com/book 吗?两年前我用过CC。我明白了,我可以用 GIT 做同样的事情。我认为学习和培训是绝对需要的。我看到CC的一个大问题。这是非常昂贵的软件,不幸的是时间有限。当您尝试将它们从一个 AD 移动到另一个 AD 时,这会导致大问题。这与 GIT 正好相反。但是 GIT 还存在其他问题,但我们可以使用公认的程序来解决这些问题。
    【解决方案4】:

    正如我在“What are the basic ClearCase concepts every developer should know?”中提到的,ClearCase 的多站点存储库可能具有一些“去中心化”功能,但其核心仍然是 CVCS:

    • 它与系统用户 ID 有很强的联系(这在没有唯一用户引用的 DVCS 中不相关)。

    • 它有一个独特的 repo 用于管理标签和分支名称 (admin vob),而您可以毫无问题地在 15 个不同的 Git repos 中定义一个“测试”分支(除非您需要知道 repo1/test 代表什么,相对于repos2/test)。

    • 它还通过 (UCM) 流层次结构集中了合并工作流定义(您可以直观地看到应该将作品从一个流合并到另一个流的位置)。

    • 它通过 UCM 提出了代码子集(组件)的定义,以及依赖管理。 Git只有子模块,没有覆盖/覆盖检测机制。

    • 它管理任何类型的文件,甚至是大型二进制文件,而 DVCS(任何类型的 DVCS)最好只管理源代码。

    底线(在我们从 ClearCase 到 Git 的迁移中)是它需要对源代码进行大量重构/重组,以便拥有可管理的 Git 存储库。

    【讨论】:

      【解决方案5】:

      您是否需要一种工具来帮助您进行软件配置管理 (SCM) 或版本控制 [系统] (VCS)?

      这就是 ClearCase 与 Git 讨论的内容。

      可以这么说,您是在将苹果与橙子进行比较。

      将 ClearCase 视为另一个 VCS 是对 ClearCase 的狭隘看法;如果您的目标是将正确的产品运出您的商店,请坚持使用 ClearCase。

      另一方面,Git 可能是目前市场上最好的 VCS,(尽管它不提供任何 SCM 支持)所以如果你关心的是分支和合并,你可以切换到它......(附注合并冲突是基线设置不当和视图配置不正确的结果)...... VOB 复制很糟糕 - 我给你。

      您计划的移动的缺点是您将丢弃您的 SCM 工具支持。而且您将不得不面对无数其他工具和大量手动工作才能实现您使用 ClearCase 开箱即用的功能。

      无论如何,一个好的 VCS 是任何 SCM 的支柱,所以从长远来看,您迁移到 Git 可能会有所回报。

      【讨论】:

      • “它不提供任何 SCM 支持”是什么意思?你能详细说明一下吗?
      • @peter-mortensen SCM 是关于生产成品的,它是关于构建、包装、运输和支持的。简而言之,它是关于变更管理,而 VCC 只是关于单个组件的组织存储。例如 git 不会知道你会使用什么编译器来定位这个或那个环境……这就是 cms 的意义所在
      猜你喜欢
      • 2012-10-05
      • 2014-11-19
      • 2020-05-21
      • 1970-01-01
      • 2022-07-21
      • 2023-03-06
      • 2019-02-05
      • 2013-01-02
      • 1970-01-01
      相关资源
      最近更新 更多