【问题标题】:How to Remove a Branch from the Middle of the Hierarchy?如何从层次结构中间删除一个分支?
【发布时间】:2014-07-29 20:11:32
【问题描述】:

我有一个使用 ALM Rangers 分支指南中的“标准”分支模式创建的团队项目:

创建之后,我发现我真的只需要“基本”模式。也就是说,我不需要“Service Pack”分支。

我有没有办法删除“Service Pack”分支并“修复”层次结构,使“Release”位于层次结构中的“Main”下?现在,“Service Pack”层次结构中的每个变更集在“Release”层次结构中都有一个对应的变更集,因为“Service Pack”刚刚出现。

【问题讨论】:

  • 为什么会有人反对这个问题?

标签: tfs branch


【解决方案1】:

不幸的是,TFS 中的分支是老式的(或者,如果您问 Torvalds,“类似恐龙”;),因为一旦创建,结构就已设置且无法更改。我相信您必须在 Main 正下方创建一个新的 Release 分支,然后从旧的 Release 分支执行 baseless merge 到新的分支。我认为您应该在合并命令中使用/noprompt 参数来停止显示“解决冲突”对话框。

这会给您带来比实际需要更多的冲突,因为 TFS 不知道要使用哪个祖先。但是由于您希望从原始的 Release 分支中获取所有内容,您可以使用命令 tf resolve /recursive /auto:TakeTheirs 告诉 TFS 始终获取源分支中的更改。

之后,你应该可以移除旧的分支树了。

复杂,但并非不可能。

【讨论】:

  • 将 /discard 参数与无根据的合并一起使用时,您不会遇到冲突,并且任何一方都不会更改任何代码
  • 在发表此评论时,TFS 已经有了“reparent”功能,允许这种结构上的变化。
【解决方案2】:

好吧,我不知道旧版本的TFS,但至少在TFS2012/VS2013,你可以这样做:

  1. Main -> Release 的无基础合并
  2. Source Control Explorer > Branching and Merging > Reparent,选择Main(新父级)

完成!

【讨论】:

  • 有时向导窗口需要一些时间来加载可能的父母
【解决方案3】:

以下在类似情况下对我有用

tf merge /baseless /recursive /noprompt /discard $/TFS/Path/To/Release $/TFS/Path/To/Main

然后:

  • 删除“Service Pack”分支
  • 签入“Main”和“Service Pack”

现在您可以进行从“Release”到“Main”的普通 GUI 合并

注意:正如许多人已经提到的,小心毫无根据的合并,它们可能会在以后被滥用时咬住你。

【讨论】:

    【解决方案4】:

    最简单的解决方案是不删除或重新设置。

    Service Pack 分支只是名义上的“Service Pack 分支”。删除“发布”分支并将“服务包分支”重命名为“发布”。

    【讨论】:

    • 简单优雅,答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多