【问题标题】:In TFS, how can I cherry-pick a changeset to an unrelated branch?在 TFS 中,如何将变更集挑选到不相关的分支?
【发布时间】:2011-04-11 11:36:51
【问题描述】:

我正在尝试清理一个非常混乱的 TFS 结构(感谢我的前任)。我现在有一种情况,我需要有选择地将变更集从一个分支带到另一个没有父/子关系的分支,并且我不希望这些更改通过他们的共享主干。我该怎么做?

我尝试了一个毫无根据的合并 - In TFS, how do I do a baseless merge on specific changesets? - 它告诉我没有要合并的更改。

我想要实现的是类似于 TFS : Can a shelveset be restored to another location? 的东西,除了变更集。

在 GIT 中,我认为这将是一个简单的选择。

我的结构看起来像:

   Y-C1-C2-C3
  /
X-------------
    \
     Z

问题是如何在不通过 X 的情况下将 C2 从 Y 获取到 Z?

【问题讨论】:

  • 您在毫无根据的合并尝试中使用了哪些选项?您是否使用了 /force 选项?
  • 是的,我尝试了强制和其他一些我在这个地方读到的东西,但结果相同 - 没有任何变化。最后我硬着头皮手动合并了所有的东西……花了 14 个小时,但至少我对结果有 100% 的信心。

标签: tfs merge cherry-pick


【解决方案1】:

我们也有类似的情况,但在我们的例子中,我们从多个分支毫无根据地合并到一个“scratch”构建分支。我们能够做到这一点的唯一方法是利用 TFS API 编写我们自己的实用程序。

好消息是,您应该能够在不到几百行代码中完成这项工作。

基本步骤是:

  • 连接到 TFS
  • 获取 VersionControlServer 的实例(我们称之为 VCS)
  • 创建工作区
  • 做一个VCS.GetChangeset()
  • 遍历Changes 以获取已更改项目的列表
  • 对从源分支到目标分支的每个项目执行Workspace.Merge
  • 签入目标分支中的项目。
  • 删除工作区

【讨论】:

  • 看起来这是除了手动操作之外的唯一方法(我这样做而不是阻止我的团队)。这应该是一个简单/常见的问题?
  • 最佳实践表明您不应该挑剔。如果您经常这样做,那么您的分支策略就会出现问题。您可能需要考虑在功能上进行分支。在我们的情况下,我们这样做是为了试构建。
  • 你说得对,分支策略存在问题,当我试图重新排列分支以便合并时不会遇到这么多麻烦时,就会出现这个问题。
  • 坏消息是,唯一的办法就是编写自己的实用程序。好消息是,它们提供了很好的 API,而且方法相对简单。
【解决方案2】:

使用 Visual Studio 更简单。

在 Visual Studio 中,使用源代码管理合并向导来合并不相关的分支。

它有一个合并选择性变更集的选项。唯一的限制是变更集必须是连续的

【讨论】:

  • 如果你想合并非连续的变更集,那么你只需重复打开源代码管理合并向导直到你完成。您可以选择在每次合并之间提交或在最后一次提交中提交。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2012-03-14
  • 2012-06-20
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多