使用 Team Foundation Server 中的 Team Foundation 版本控制将分支的最新版本合并到其根目录

Posted

技术标签:

【中文标题】使用 Team Foundation Server 中的 Team Foundation 版本控制将分支的最新版本合并到其根目录【英文标题】:Merge latest version of a branch into its root with Team Foundation Version Control in Team Foundation Server 【发布时间】:2020-05-01 11:43:40 【问题描述】:

我们在尝试使用 Visual Studio 2017 中的 Team Foundation 版本控制进行合并时遇到问题,我们不知道是否可以按照我们的意愿进行合并。

我将解释我的问题的简化版本:

我们在源代码管理中有一个根分支,我们称之为 Root,我们有一个 Root 分支,我将其称为 Branch。

我们正在对 Branch 进行更改,当我们确定要在 Root 上进行更改时,我们会从 Branch 合并到 Root(我们进行反向集成)。问题是,我们在过去做了一些合并,我们只选择了 Branch 中的变更集的一个子集来将它们合并到 Root 中。

现在,在对 Branch 进行了一些其他更改之后,我们知道最新版本的 Branch 正在运行,我们希望将该版本合并到 Root 中。

问题在于,当我们进行合并时,它采用文件的版本,因为它在修改该文件的最后一个变更集上,并且该变更集没有合并到根中。但是我们知道,Branch 中该文件的最后一个版本是我们想要的版本,即使它没有出现,因为让它处于该状态的变更集之前可能已经被合并(事实上,大多数 tiemes,最后一个该文件在 Branch 和 Root 中的版本是相同的,我们不想更改它)。

例子:

我们将 Changeset 1 放入 Branch,并将其合并到 Root。

我们将 Changeset 2 放入 Branch,修改 File1(但我们不会将其合并到 Root 中)。

我们将 Changeset 3 变成 Branch,再次修改 File1,并将其合并到 Root。现在 Branch 和 Root 拥有相同版本的 File。

我们将变更集 4、5、6 放入 Branch,与 File1 无关。

现在我们要做的是将分支中任何文件的最新版本合并到根目录中。

但是如果我尝试将Branch合并到Root中,会提示有冲突,在Conflict Resolver中会显示的是:

作为源的变更集 2 之后的文件 1(即最后一个未合并到根的变更集之后的文件版本),并且

File1 在 Root 中作为目标(恰好与我在上一版 Branch 中的 File1 版本完全相同,我想保持这种方式)。

顺便说一句,如果我们用最新版本、变更集(使用最新的)、日期(现在)、工作区等标记“选择所有更改直到...”,或者“选定的变更集”,这并不重要" 然后我们选择所有内容(当然,以前合并的内容无论如何都不会出现在这里)。 这是告诉源代码控制我们想要将分支中每个文件的最新版本合并到根目录的某种方式,而不管之前是否合并了变更集?这一切有什么意义吗?还是我错过了什么?

【问题讨论】:

您是否检查并尝试过以下答案中提到的建议?这对你有用吗? 【参考方案1】:

TFS 合并引擎依赖于历史记录,而不是文件内容。您可以检查tf merge /candidate 命令以列出源中尚未合并到目标中的变更集。并使用tf merge /version 合并更改。检查以下链接:

https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/merge-command?view=azure-devops

顺便说一句,总会有你必须手动合并的情况。

【讨论】:

以上是关于使用 Team Foundation Server 中的 Team Foundation 版本控制将分支的最新版本合并到其根目录的主要内容,如果未能解决你的问题,请参考以下文章

team foundation server 工具的使用

使用 Team Foundation Server 的网站项目

Git 和 Team Foundation Server

Team Foundation Server 构建失败

手动为 Team Foundation Server 安装 SQL Server

Team Foundation Server可以使用https而不是http吗?