【问题标题】:ClearCase automatic merge deletes team members' codeClearCase 自动合并删除团队成员的代码
【发布时间】:2018-01-27 20:33:01
【问题描述】:

我们正在使用 ClearCase,为我们的团队使用单个开发流,没有“锁定”(无保留签出)。

ClearCase 客户端版本:7.1.1 ClearCase 服务器版本:7.0.1.2

我们进行了相同的测试,但没有使用“图形合并”。此选项按预期工作!也许这可以揭示 ClearCase 过去的缺陷或解决方法。

这意味着 2 人或更多人可以一次对同一个文件进行编辑,而无需等待文件被签入。

我们已经看到了一些奇怪的行为案例,并在今天进行了一些实验,以发现以下发生的场景:

  1. File.txt 由 2 名团队成员签出。
  2. 每个成员都在文件中进行更改(在文件的其他区域)。
  3. 第一个开发人员将代码签入到 ClearCase,这里没有问题。
  4. 第二个开发人员签入,收到合并弹出通知。

选择“图形合并”时,在这种情况下,ClearCase告知所有合并都是自动完成的,并且不需要开发人员的其他输入。

再进一步看,第一次签入已删除(删除),只保留后来签入的更改。

为什么会这样?这导致我们的团队已经多次丢失代码。我们是否在做不安全/错误的事情?

编辑:用问题图片说明问题:

文件 Manager.cs 的版本为 27。 两名开发人员正在检查它。

进行了更改,签入。 另一个签入,获取合并通知。

这是我在图形合并中看到的:

注意左边是27版,中间是28版(最新签入的版本),右边是去掉28版代码更改的结果!

为什么会自动发生这种情况??

图片也可以在这里看到:Image

【问题讨论】:

  • 不,权利不会放弃代码更改。右边是 dev2 当前签出的文件,带有 dev2 更改。合并的结果在该屏幕截图的顶部,并且确实删除了 dev2 添加的行。奇怪的是,在 3 路合并中,ClearCase 应该选择保留 base/dev2 版本(不添加新行)而不是源版本(添加 1 个新行)。这是通过带有完整 ClearCase 客户端的经典合并工具,还是通过外部差异/合并工具?还是通过 CCRC 的一些基于 Web 的界面?
  • publib.boulder.ibm.com/infocenter/cchelp/v7r0m1/…:“对于在基本贡献者和另一个贡献者之间发生变化的任何行,Rational ClearCase 通过接受贡献者的变化来执行一个简单的合并”。所以它应该保持 dev1 的变化(版本 28)
  • 标准安装,没有自定义合并工具。使用 clearcase explorer 签入和处理合并...这可以配置为策略吗?
  • 可以为给定类型定义一个策略:www-304.ibm.com/support/docview.wss?uid=swg21240740 但是对于 txt 文件不应该是这种情况。顺便问一下,您使用的是哪个版本的 ClearCase?
  • 我需要检查我的客户端是 7.1.1

标签: version-control clearcase vcs-checkout


【解决方案1】:

注意:如果您在没有“锁定”的情况下使用 ClearCase,这意味着您正在进行无保留结帐(而不是保留结帐)。

如果您选择“图形合并”,您应该会看到一个帮助您协调合并的窗口,即使没有冲突。

这样的合并不应该删除任何以前的签入:它可能会取消以前的修改,只有当所有新的更改都被选中时,但是如果你打开了图形合并窗口,你可以控制如何应用合并。

对于您过去有问题的合并,您可以轻松地从版本树中重新应用从 dev1 的先前版本到最新版本的合并,以便重新应用那些已取消的更改。


自从我 4 天前的初步回答以来,出现了 2 个新信息:

  • ClearCase 客户端版本:7.1.1 ClearCase 服务器版本:7.0.1.2。
    如果客户端的版本比服务器更新,那绝对不是好事。

  • 我们执行了相同的测试,但没有使用“图形合并”。此选项按预期工作!
    这与用于合并的 GUI 和纯命令行(如 this other scenario)之间已经看到的一些差异是一致的。
    当 GUI 出现故障时,请始终尝试使用纯 CLI(命令行界面)。

【讨论】:

  • 我的意思是毫无保留,这是一个错误。自动 ClearCase 合并窗口指定它能够自动合并两个版本。但是,在这种情况下,它会自动删除先前签入所做的更改。合并较大的文件实际上不可能检测到这些,除非遍历所有合并点,无论是自动还是手动(也许这应该是实践?)这对我们来说完全违反直觉,并给我们带来很多问题。
  • @liortal:但是查看该合并文件的版本树,您是否确认您没有丢失 dev1 更改(在那个dev1 签入仍然存在)?问题是在该微不足道的合并期间完成的新签入似乎取消了 dev1 更改,只留下了 dev2 更改,对吧?
  • 对不起,如果我没有用完全正确的术语表达自己。在版本树中,我可以看到两个节点(版本):一个是较早的,其中包含 dev1 更改。第二个仅包含 dev2 更改。您可以将其称为取消或删除 dev1 更改,无论术语是什么,在较新版本中,dev1 更改已从文件的最新版本中消失。在进行了多次签入后发现这一点,使得无法将更改重新应用到最新版本。为什么 ClearCase 会这样?这是标准行为吗?
  • @liortal:不,不是。它应该只添加 dev2 更改,而不是删除 dev1 更改。 dev2 是否使用快照视图?
  • 但是base不应该是dev2,应该是dev1之前的版本。截图确实很有趣。
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 2021-07-27
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多