【问题标题】:Finding merge candidates in TFS在 TFS 中查找合并候选者
【发布时间】:2016-09-28 01:21:04
【问题描述】:

我的代码有两个分支。让我们说B1B2。代码更改并行发生在两个分支上,我们定期合并(不是所有的,只是必要的)从B1B2。但是,此合并是手动完成的(无论出于何种原因),方法是将代码从一个分支复制粘贴到另一个分支。现在,我想确保所有必要的东西都从B1 合并到B2。请注意,B2 分支中的文件可能包含来自B1 之外的其他更改。我尝试使用tfs merge /candidates ... 命令,希望它能进行文件比较(可能使用diff 工具)并给出输出,但这不起作用。只有当我使用了tfs merge 命令时,它才会记录合并。如果手动合并文件,是否有任何简单的解决方案可以消除误报?

【问题讨论】:

  • 手动合并是否意味着只是更改 B2 中的一些文件并在源代码管理中检查它们?您既没有使用 tfs 合并命令,也没有使用 VS 的合并选项。由于您提到 B2 分支可能包含 B1 的其他更改。您是否手动合并了从 B1 到 B2 的所有更改?
  • @Patrick-MSFT:是的,手动结帐-复制粘贴-签入。

标签: tfs version-control merge branching-and-merging


【解决方案1】:

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

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

这将获取已识别的变更集(在本例中为变更集 #12345),并将其更新为合并到目标分支(分支 B2)。目标文件将被签出,但不会更改 - 您只需签入即可完成操作。之后,变更集将不再显示为合并候选者。您可以指定要同时合并的变更集范围,但它们应该是连续的。

请注意,执行此操作后,变更集偶尔仍会显示为合并候选者 - 这在最新版本的 TFS 中相当罕见,并且几乎不可能修复(除非您正在运行自己的 TFS 本地安装和想要在数据库中弄脏你的手)。如果您最终得到了这些被孤立的变更集之一,请忽略它。

TFS 在合并和帮助您解决合并冲突方面做得非常出色。只有当您有很多自动生成的代码(在合并时会产生很多难以解决的冲突)或者您有二进制文件时,您才想以自己的方式手动“合并”事物。

【讨论】:

  • 我认为这是我现在最好的选择..会尝试同样的。
【解决方案2】:

手动合并在一定程度上违背了源代码控制的原则。强烈推荐你通过VS使用tf merge命令或者Source Control Merge Wizard来实现合并。您可以合并变更集版本、日期版本、标签版本,甚至工作区版本。如果您使用了该命令,一切都会变得非常简单。正如您所提到的,最简单的解决方案是使用tfs merge /candidates,它将打印源中尚未合并到目标中的所有变更集的列表。您只需要检查是否已将所有必要的东西合并到 Branch2。

如果您坚持手动合并,消除误报的唯一可能方法是在合并后比较文件、文件夹或分支。您可以在 VS 中使用 比较文件夹 或快速比较(只需单击鼠标两次)与此扩展 TFS Productivity Pack (Visual Studio 2015)

【讨论】:

    【解决方案3】:

    我认为这种情况没有任何简单的解决方案。在您提到合并仅必要的事物的问题中,合并B1-> B2中的所有内容可以吗?如果是,请继续阅读:

    1. 如果 B2 中的附加更改很少,首先创建在 B2 分支中修改的文件列表(不属于 B1 的附加代码)。从 B1(比如 B2_new)创建一个新分支,并按照上面列表中的准备签出/编辑 B2_new 分支中的文件。 (在签入期间,您可能需要解决冲突。)但这会创建一个新基线,现在您知道 B1 中的所有内容现在都存在于 B2_new 中。丢弃/锁定 B2 分支并继续使用 B2_new。

    2. 如果 B2 中的更改非常重要,以至于需要进行大量手动编辑才能将其移动到 B2_new,那么我只会将其吸收并从 B1 合并到 B2(完整分支或仅您需要的文件夹)。是的,即使对于您已经手动合并的文件,这也会显示大量冲突。但是要在 TFS 中创建这种合并关系,您必须这样做。这将是一个非常糟糕的合并。

    就个人而言,如果 B2 的变化很小,我会更喜欢选项 1,因为它更简洁,并且您将获得一个干净的工作状态。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 2012-04-22
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多