【问题标题】:HowTo: correctly synchronize TFS branches with missing changesets?如何:正确同步缺少变更集的 TFS 分支?
【发布时间】:2017-02-11 14:06:30
【问题描述】:

背景

如果我合并我们的main 分支到我们的development 分支,TFS 将声明没有要提交的更改。然而,文件级别比较(使用WinMerge)清楚地表明存在差异(例如文件丢失、文件内容不同等)。

简而言之,我们的 maindevelopment 分支不再同步,这很可能是由于在之前的 TFS 迁移期间丢失了变更集。

问题

生成以下内容的最佳方法是什么?

  1. 通过以下方式同步maindevelopment 分支:对development 分支执行所有必要的插入/更新/删除操作。 (即main 是主副本)。
    • 在进程结束时 WinMerge 应该指出两个分支之间的差异为零 (0)。
  2. 保持development 分支历史不变。
  3. 通知 TFS development 分支现在与 main 完全同步,以便:
    • TFS 不会尝试合并较旧的 development 变更集与 main
    • 只有将来对development 的更改才会在合并 操作期间推送到main

TFS 不是我的专业领域 - 如果您能提供任何指导,我们将不胜感激。

上下文

  • Visual Studio 2015
  • TFS(版本 14.95.25122)

参考文献

  • Merge Command
    • "进行无base版本的合并。即允许用户合并没有合并关系的文件和文件夹。baseless合并后存在合并关系,以后的合并不必是baseless 。”
      • 虽然 Development 是从 Main 分支出来的,但这似乎可以解决我缺乏历史记录(即缺少变更集)的问题。
  • TFS Merge: Best Practices
  • TFS: Overwrite a branch with another
    • tf merge A B -r -force -version:T
      • 我认为这对我们不起作用,因为缺少变更集。

【问题讨论】:

  • 文件差异的存在并不意味着有变化可以从主要合并到开发。运行“tf merge /candidate /recursive main development”和“tf merge /candidate /recursive development main”命令会有什么结果?

标签: tfs version-control tfs-2015


【解决方案1】:

当 TFS 进行合并时,它基于先前的合并历史记录进行合并,而不是基于源文件和目标文件的实际内容。

此问题可能是由于在执行合并时选择了keep target 或有一次执行了与discard 选项的合并(使用命令行TF merge /discard)。

要解决此问题,您可以尝试:

  1. 在 tf merge 命令中使用/force 选项。如果存在先前合并的变更集(可能不正确)并且您想再次合并它。 /force 标志忽略表示特定变更集先前已从源合并到目标的合并历史记录,并再次合并该变更集。

  2. 使用回滚撤消先前的合并。如果您最近完成了丢弃变更集的合并。在历史记录中找到它,右键单击变更集并选择回滚并签入已撤消的代码。

【讨论】:

  • re:Cece 的评论:“/force 标志会忽略合并历史记录,该历史表明特定变更集先前已从源合并到目标,并再次合并变更集。”。这无济于事,因为我的雇主如何从 TFS2012 迁移到 TFS2013。长话短说,我无法基于变更集进行合并,因为历史记录不完整(即缺少变更集)
  • 既然您缺少变更集,那么创建一个新分支怎么样?
  • 两个开发分支会很尴尬:要查看文件的历史记录,您必须在两个地方查看。删除旧分支会导致变更集历史记录丢失。
  • 使用 Rollback 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2014-11-01
  • 2012-06-20
  • 1970-01-01
  • 2017-05-31
相关资源
最近更新 更多