2011-04-19 84 views
24

我遇到的问题了解如何根据TFS Ranger团队提供的最佳实践配置TFS。问题是这样的:TFS 2010跨整个团队项目的分支 - 最佳实践

我的公司有几个产品使用共享的公共代码库。

> $/Core 
> -> /Main/Source (Parent Branch) 
> 
> $/Product1 
> -> /Main/Source 
> -> /Main/Source/Core/Source (Child Branch from $/Core) 
> -> /Main/Source/... 
> 
> $/Product2 
> -> /Main/Source 
> -> /Main/Source/Core/Source (Child Branch from $/Core) 
> -> /Main/Source/... 

因此,我们有一个团队集合,并说这个例子有三个团队项目。 ($/*是一个团队项目)

我们最初的版本分支有点痛苦。而不是分支到/ Main到/ Releases或/ Main到/ Development,我们一直在分别分支每个项目。 (不是团队项目...解决方案项目)。

这是由于无法嵌套分支根。 (参见TFS错误:TF203028 and TF203071

根据TFS Ranger Guide和我们对分支版本,修补程序,开发的修订方法,我们应该从/ Main而不是/ Main/Source/Proj1,/ Proj2,/ Proj3等这只是一个相当大的烦恼。

理想情况下,我们想:

> $/Product1 
> -> /Main/ (Branch - Parent) 
> -> /Releases 
> -> /1.x 
>  /1 Service Pack (Child Branch from $/Product1/Main 
>  -> /1.0 
>   -> /1.0 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack) 
>   -> /1.0 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only) 
>   -> /1.0.22 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only) 
>  -> /1.5 
>   -> /1.5 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack) 
>   -> /1.5 RTM (Child Branch from $/Product1/Releases/1.x/1.5/1.5 Hotfix - Read Only) 

解决方案:1。 我们可以共享的每个分支(即$ /核心)转换回常规文件夹。这样,/ Main下的文件夹就不是分支根目录。然后,我们可以执行从$/Product1/Main/Source/Core/Source无基本的合并回到父$/Core/Source。

有没有任何经验的baseless合并。我从微软读到的是他们是不应该司空见惯的例外。 MS声明,如果您使用TFS正确设置项目,则永远不需要执行无基本的合并。

在团队项目之间进行分支时,这是如何实现的?!?任何软件开发公司都应该在产品之间共享库。

我也接受其他解决方案。

谢谢!

+0

这是另外一个有相同问题的人:http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/ thread/a2f1b3bb-337f-4abe-abed-04c367523eaf – Daniel 2011-04-21 14:46:40

+0

这个问题的答案似乎是主观的。 Microsoft TFS Ranger团队尚未提供有关此主题的足够信息或解释。我很难奖赏赏金,更不用说选择“正确”的答案,所以我最终只会根据最高票数来做。这似乎同时提供了解决方案将工作得很好,不使用baseless-merge的唯一原因仅仅是因为MS说它不合适......背后的推理似乎是未知的。 – Daniel 2011-04-22 19:37:24

回答

11

我会向环中抛出一个选项,它对你可能有用也可能没有用。如果有什么安慰的话,我一直在思考这个问题,并且一直没能找到一个完全令人满意的解决方案。这是一个非常好的问题,我很乐意看到其他人如何解决这个问题。

我知道尽可能从源代码构建是一个好主意,但我不是团队项目之间分支的粉丝。如果你有一些共同的代码,并且需要在2到3个其他团队项目之间进行分支,那么分支是可管理的,但是如果你有20或30个(或100个)团队项目,那么管理合并成为头痛的问题。如果在消费团队项目中工作的开发人员在“主人”中没有相同的权限,例如无法查看历史记录等,则可能存在其他问题。当然,如果您的代码需要在团队项目之间共享在不同的项目集合中,则无论如何您都不能分支。

所以考虑到这一点,我会建议你以对待第三方库和使用二进制引用的相同方式处理公共代码。一旦你接受了这个想法,你可以选择多种选择。(这里有一些,但也有可能更多)

  1. 你可以有构建为常见的代码的二进制文件复制到放置位置,旁边一个合并模块包装(如果您使用MSI)。然后,您创建对放置位置的二进制引用,并获取用于打包的任何内容以导入合并模块。在这种情况下,你需要确保放置位置是稳定的(最好是只读到大部分的开发者的,以防止篡改)
  2. 类似选项1,但使用一个工具,如NuGet来管理你的参考,这将自动化引用新版本二进制文件的过程。如果您想更好地控制新版本的推出,这可能不是一种选择。
  3. 你可以简单的二进制文件,以$ /产品1 /分公司/ lib目录/通用文件夹中分支,正如我所说的使用相对路径

引用它们,我很愿意听取其他怎么样SOers已经使用TFS解决了共享代码问题。

+0

这绝对是一种可能性。但是,这里的主要缺点是Product1和Product2不能再维护他们自己的Core版本。 Core的任何构建都必须与每个具有文件引用的项目兼容。我们只有3-4个团队项目,所以这可能是可管理的,尽管这些团队项目在12-16范围内有可能不得不参考Core的解决方案项目。你对使用文件引用vs baseless merge有什么看法?再次感谢。 – Daniel 2011-04-22 13:49:35

+0

我想我原则上是无情的合并,MS建议反对它,我想他们知道他们在做什么:-)我已经使用过他们,但只是作为最后的手段。我知道MS在[TFS 2010 sp1]中改进了它们(http://blogs.msdn.com/b/buckh/archive/2011/02/06/improvements-to-baseless-merge-in-tfs-2010- sp1.aspx)我想我唯一不明白的是,为什么从“core”分支出来的时候没有baseless的合并工作呢?当你进行无基础的合并时,它建立合并关系,即子码合并并不是毫无根据的,所以最终的结果将是一样的 – 2011-04-22 16:38:22

+0

非常感谢您的输入James,这些信息在决定采用哪条路径时肯定会很有用。 – Daniel 2011-04-22 19:43:24

2

为了实现你想要什么,你需要先转换下根到文件夹的所有分支,然后你就可以根转换为文件夹。

我们已经被困不同分支下合并,然后我们去了毫无根据的合并。我们花了一段时间才弄清楚它是如何工作的,但之后我们成功地进行了跨分支合并,然后创建了它们之间的关系。

tf merge /baseless "D:\TFS2010\Root\ServicePack" "D:\TFS2010\Root\MainLine" /recursive 

完成无基本合并后,您需要签入所有文件。你仍然会发现分支之间的关系不会被创建。

对于这个点击的ServicePack分支(按照我的例子),然后从文件菜单中单击源代码管理 - >分支与合并 - >重新设置父级。在那里你可以选择重新养育。一旦完成,无论何时想要跨越这些分支进行合并,您都可以像跨分​​支机构进行正常合并一样。 enter image description here

+0

你能评论任何形式的可预见的障碍吗?为什么微软会使用无基本合并作为最后的手段/“你不应该需要这个”功能。 – Daniel 2011-04-22 13:53:06

+0

Baseless合并是我会说的很好的功能。这是我们用来对抗基本面的特点之一。它是独特的命令,它允许我们跨越不存在关系的分支进行合并。 大约6个月前,我为我公司使用了无基本的合并,而且我们还没有遇到任何问题。即使没有任何关系,我们也可以在分支之间建立关系,这是一个福音。 我会建议你继续无基础的合并。 – 2011-04-22 15:01:40

+0

感谢您的输入Sunil。我自己和项目经理很可能会测试这个毫无根据的功能并做出决定。 – Daniel 2011-04-22 19:44:36

6

TFS 2010叉分枝回顾:

我想提出的信任模式的TFS 2010毫无根据的合并功能的方式来解决这个问题。我强烈推荐使用Wrox的书“Professional Team Foundation Server 2010”。

在这里面,它深入介绍了这个问题,虽然它不主张用毫无根据的合并的,它揭示了如何在这样的场景中使用它们的光。

我们一直在使用他们,因为这个问题是先解决早在4月份,还没有遇到的情况是毫无根据的合并出现问题。我想按照本书和ALM Ranger团队的建议,发布详细描述我们分支设置的图像。

enter image description here

1

我已经配置TFS刚才并会见了同样的问题。 问题是,没有必要进行无基础的合并。 解决方法:

  1. 创建父分支

    $ /核心/主要

  2. 创建子分支

    $ /产品1
    - > /主营
    - >/Main/Core
    - > /主/ ...

  3. 删除子分支文件夹

    $ /产品1 /主/核心

  4. SAME名,创建文件夹

    $ /产品1 /主/核心

  5. 转换产品1文件夹分支

    $ /产品1 /主营

现在你可以从$合并更改/核心/主$/Product1/Main/Core并向后。
可视化对于Core分支不起作用,但是我猜是可以的;)

+0

好的,而不是删除文件夹,你可以[转换分支回文件夹](http://msdn.microsoft.com/en-us/library/ms181425.aspx),但这个选项不会显示给我。 – stbear 2011-12-27 11:55:47

+0

我知道这是旧的,但你需要选择源代码管理资源管理器中的分支,然后单击文件(从主菜单) - >源代码管理 - >分支和合并 - >转换为文件夹。该选项在上下文菜单中不可用。 – 2013-03-08 10:05:56