TFS 中的跨分支合并?

Posted

技术标签:

【中文标题】TFS 中的跨分支合并?【英文标题】:Cross-Branch merging in TFS? 【发布时间】:2010-09-08 08:16:50 【问题描述】:

是否可以合并到 TFS 中不是直接父或子的分支?我怀疑答案是否定的,因为这是我在使用它时所经历的。然而,似乎在某些时候,当正在开发的不同功能可能具有不同的批准周期(即功能一可能在功能二之前获得批准)时,它会非常有用。当我们有生产分支时,这变得非常困难,我们必须将一些功能合并到以前的分支中,以便我们可以在下一个完整版本之前发布。

我们目前的分支策略是在主干(或我们称之为主线)中开发,并创建一个分支来稳定并发布到生产环境。然后,此分支可用于创建修补程序和其他内容,而主线可以针对即将推出的功能进行分歧。

还可以使用哪些技术来缓解上述情况?

【问题讨论】:

呵呵,看到有人对此表示赞同,这让我想起了我在 TFS 的日子。很高兴地说,自从我大约两年前搬到 Git 后,我​​就不必担心这样的事情了;) 不正确的 Joel,虽然您不必担心技术限制,但 git 更擅长分支,您仍然需要担心功能失调的行为......那些超越工具。 我建议您升级到 TFS 2013.3 / VSO 并迁移到基于 Git 的团队项目。 “无法确定工作空间”/“没有合适的映射”:使用一个本地路径和一个 repo 路径。 【参考方案1】:

我同意 Harpreet 的观点,您可能想重新审视您是如何设置分支结构的。但是,如果您真的想执行这种类型的合并,您可以通过一种称为无基础合并的方法。它从 tfs 命令提示符运行,

Tf merge /baseless <<source path>> <<target path>> /recursive

更多关于无基础合并的信息可以在here找到

我还发现这个文档在构建我们的 tfs 分支结构时非常宝贵 Microsoft Team Foundation Server Branching Guidance

【讨论】:

【参考方案2】:
tf.exe merge /recursive /baseless $/TeamProject/SourceBranch $/TeamProject/TargetBranch
MSDN:How To: Perform a Baseless Merge in Visual Studio Team Foundation Server

【讨论】:

【参考方案3】:

您可能需要重新审视您的分支策略。你如何获得生产分支?您是否正在合并来自开发分支、回归测试的所有代码,然后为修复创建一个生产分支?或者你是在主干上开发,然后创建生产分支来稳定和释放?第二种方法会产生您所描述类型的问题。如果您使用第一种方法 - 主干应该仅用于已构建在经过测试然后合并的分支上的东西,您将很少遇到这种情况。在这种方法下,如果您仍然遇到此问题,可能是因为您的开发工作量非常大,您可能需要一个相对复杂的分支策略,其中包含多个分支和提升层。

【讨论】:

【参考方案4】:

只要分支是从同一个原始文件夹中创建的,您就可以这样做。

主干/ 分支机构/ -/feature1(从主干分支) -/feature2(从主干分支)

如果你这样做,那么你应该也可以在 feature1 和 feature2 之间合并。

尽管我对 TFS 的分支/合并经验让我想要更多。我希望我们只有 SVN。

【讨论】:

【参考方案5】:

是的,您可以进行无根据的合并,但只能从命令行 (tf.exe)。

【讨论】:

【参考方案6】:

TFS 将允许您与不是父/子的分支合并 - 这些称为无基础合并。请参阅以下链接:

From MSDN

From the TFS Team via CodePlex

我们通常会对开发分支进行重大或不稳定的更改。如果接近我们产品之一的主要版本,几乎所有更改都将在分支上完成。

【讨论】:

【参考方案7】:

我远不是 TFS 专家,但我认为你可以合并兄弟,而且我认为这不是毫无根据的合并。

我们为一个特性(分支名称“feature”)分支了我们的主分支(分支名称“main”),然后我需要在一个分支中进行一些工作,该分支也从主分支分支出来(分支名称“dev”) ”)。我认为 feature 和 dev 分支是兄弟姐妹,因为它们都来自同一个父级。我将功能合并到 dev 并且所有文件(14000)都被标记为合并,一些被标记为合并,编辑。我无法取消(visual studio 只会挂起),所以我接受了合并。然后我将 dev 合并到 main,然后我将 main 拉到 feature,再次标记 14000 个文件进行合并。我真的很沮丧,担心这种情况会继续下去。

此时我们做了一个测试项目。我们设置 main,然后从 main 分支 dev 和 feature。我们重复上述步骤,结果相同。一旦我们完成了从 main 到 feature 的合并,所有未来的合并都只显示编辑过的文件。

经过我们的小测试后,我完成了从主要功能到功能的合并。就像测试一样,我们的合并现在只显示编辑过的文件。我们可以去 dev 到 feature,feature 到 main,main 到 dev 等等。

我确实注意到分支时所有文件的日期都被修改了。也许这是个问题?

【讨论】:

以上是关于TFS 中的跨分支合并?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TFS 中分支和合并

TFS:合并回主分支

防止在 TFS 2017 分支上直接签入,仅允许合并

如何撤消 TFS 中的回滚?

删除 TFS 2010 中的分支关系

TFS未合并更改