2

我们在发布周期中维护多个 TFS 分支。当前流程是在用户故事完成后从 WIP 分支中挑选变更集到测试分支中。

我很想知道 git-tf 是否允许以这种方式处理多个远程分支,以及它是否能够签入合并而不是签入看起来像新代码的代码。

有一个关于这个here的讨论:

用 git tfs 合并两个 TFS 分支

并且有人提到 git-tfs 不会与其他直接使用 VS 的人相处得很好。有谁知道 git-tf 是不是这样?

4

1 回答 1

5

此时,git-tf不会用 git 分支表示 TFS 分支,也不会在任一方向翻译合并——也就是说它不会在合并中签入,也不会将 TFS 合并的结果显示为 git 合并。这是一个非常重要的问题,因为两种架构中的合并之间存在一些非常根本的差异。

TFS 合并为 git 合并:

在 git 中,您合并两个提交并最终得到一个结果提交。TFS 看起来很相似——因为您选择了合并源和目标变更集,但合并源不必是变更集。您可以根据标签、工作区版本、日期等进行合并。这意味着您最终可以合并来自多个不同更改的不同文件。这是很容易解决的问题(最终,我认为,将其表示为一些疯狂的章鱼合并)。

一个更难解决的问题是基于 TFS 分支创建 git 分支。这更像是一个设置问题 - 即,您想要哪些分支?他们都是?他们中有一些?如果答案是“全部”,那么在您进行初始克隆时很容易设置。但对我来说,那是 - 微不足道的数百个分支机构,而且第一次建立起来有点贵。如果答案是“其中一些”,那么您必须在克隆时全部指定它们,否则您最终会以令人讨厌的方式重写 git 历史记录。

git 合并为 TFS 合并:

在 git 中,分支是短暂的。它实际上只是一个指向树中节点的指针......没有长寿命的状态说“提交1b4caf曾经在分支branch中”。想象一下,您有一些 git 分支master指向 TFS 分支$/Proj/main,而另一个 git 分支test指向$/Proj/test. 在 git 中,你合并testmain. 没问题,此时mainHEAD提交有一个父级是test's HEAD。但是,如果您开始更改test分支中的内容,这很快就会变得难以确定。

此外,现在git-tf将单个 git 分支映射到您的 TFS 服务器路径。对于合并签入,我们必须一次签入多个分支。假设您对它们进行了一些提交master和一些提交test,然后合并它们HEAD的每一个。现在我们必须检查每个 TFS 分支的多个提交,然后进行合并。这并不一定很难,但它与git-tf当前的工作方式大相径庭。

这绝不是一个不可能的问题,但这需要一些聪明的工程和大量的聪明测试。但它还没有。

于 2012-09-06T16:45:16.610 回答