【问题标题】:Branches in TFS merged up appear as pending to merge downTFS 中合并的分支显示为待合并
【发布时间】:2018-06-19 09:19:27
【问题描述】:

我在 TFS 上有以下结构:

MAIN
RELEASES
      \---
          VERSION 1

VERSION1 是 MAIN 的一个分支,没什么特别的。我们在 VERSION 1 上进行开发,然后将其合并到 MAIN。

这些合并中的一些有时会显示为等待从 MAIN 向下合并到 VERSION 1。

如果我们转到 MAIN -> Merge,选择 VERSION 1 作为目标,然后选择“Merge selected changesets”,我们希望看到签入在 MAIN 上完成,但在 VERSION 1 上不存在,但由于某种原因,我们看到了一些签入在 VERSION 1 上完成并合并到 MAIN(当然它们存在于 VERSION 1 上,因为它是没有开发的源分支。

关于为什么会发生这种情况的任何提示?我们同时维护多个处于活动状态的版本,我们确实需要验证是否已完成与相关版本的所有合并。

如果我再次向下合并,我可以看到一个修改后的文件,其属性 [merge, edit] 完全没有差异(因此实际上没有必要像预期的那样再次合并)。

更新

在下图中,您可以看到合并完成。 00.28.02 类似于 VERSION 1,Source 类似于 MAIN。

无论如何,当我检查待从 MAIN 移动到 VERSION 1 (00.28.02) 的变更集时,它会显示变更集 42741 :S

【问题讨论】:

  • 嗨,Ignacio Soler Garcia,关于这个问题的任何更新,你知道了吗?
  • 我还没有时间对此进行调查……但我不会忘记的。我可以肯定的是,我们没有进行部分合并。我们总是合并完整的变更集。无论如何,我会跟进我发现的任何内容。

标签: .net tfs merge branch tfs-2015


【解决方案1】:

根据您的描述,似乎问题是当您从 Main 合并到 version1 时,以前合并的更改仍处于待处理状态。

通常这种现象代表存在部分合并的变更集。使用 Track Changeset 功能并单击 Visualize 按钮以查看更改是否已合并。它将显示它已合并,但具有不同的背景颜色和星号。

部分合并只有变更集中的一些更改合并到目标中时被记录。供您参考,在以下两种常见情况下,您最终可能会出现部分合并(使用 dev 而不是 version1):

场景 1:在检查合并文件时撤消一些待处理的更改

在这种情况下,即使我们已经将变更集 Dev 合并到 Main,它仍然是一个合并候选者。这是因为合并引擎检测到该变更集中仍有一些未从 Dev 传播到 Main 的变更。

场景 2:在特征级别而不是从分支顶部执行合并

例如:假设您有两个分支 MainDev,每个分支都有两个文件夹(Feature1 和 Feature2),每个功能文件夹包含一个文件。我们编辑功能文件夹(Dev\Feature1\feature1.txtDev\Feature2\feature2.txt)中的两个文件并签入更改。

如果在Feature1级别进行合并操作。(Changset142→ Changeset143)您会注意到,在 Pending Changes 窗口中,只有在 Feature1 文件夹中完成的编辑会被合并。完成合并。

如果您查看 Feature1 文件夹的合并历史记录,您将看到来自变更集 142 的所有更改都已合并到变更集 143。

但是,如果您查看 Main 的合并历史记录,您会发现只有部分变更集 142 已合并到变更集 143。这是正常的,因为变更集 142 有一些更改——在 Feature2 中编辑文件文件夹 - 未交付。


在你的情况下来确定它是否是部分合并,以确定哪些更改已被合并,哪些更改从变更集中被遗漏了。 实现此目的的唯一方法区分部分合并的变更集的内容,以及作为合并结果生成的变更集的内容。更多详细信息可以参考这个博客:Partial Merges in TFS – A Guide

如果没有实际更改的文件,您可以使用以下解决方案使特定变更集不再显示为合并候选者

您可以发送discard merge。 这必须从命令行完成。打开Developer command prompt, 然后导航到您的任一分支下的文件夹(即导航 给受影响的人之一 workspaces)。 然后输入:

tf merge /r /discard "$/Project/B1" "$/Project/B2" /v:C12345~C12345

这将采用已识别的变更集(在这种情况下,它是变更集 #12345),并将其更新为合并到目标分支(分支 B2)。目标文件将被签出,但不会更改 - 您 只需签入即可完成操作。在那之后 变更集将不再作为合并候选出现。您可以指定 要同时合并的一系列变更集,但它们应该是 连续。

请注意,执行此操作后,更改集偶尔仍会显示 作为合并候选人 - 这在最新的情况下相当罕见 TFS 的版本,并且几乎不可能修复(除非您是 运行您自己的本地 TFS 安装,并希望得到您的帮助 数据库中脏了)。如果你最终得到其中一个被困 变更集,忽略它。

来源: Finding merge candidates in TFS

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 2012-10-16
    • 2010-09-08
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多