如何避免源代码依赖层次结构导致的嵌套分支

时间:2012-08-22 14:08:00

标签: tfs tfs2010 branch dependency-management

我们正在使用TFS 2010,我们的依赖/分支管理存在一些非常烦人的问题。

乍一看,我们的问题非常普遍。我们有AppServerWebClientWinClientWebClientWinClient都取决于AppServer。还有两个限制:

  1. 我们希望包含特定版本的已使用依赖项
  2. 我们更喜欢包含源代码而不是二进制文件,因为它更容易实现并测试来自特定来源的AppServer更改,例如WinClient
  3. 我们选择以下文件夹结构:

    \
    |-AppServer (1)
    |-WebClient
        |-Dependencies
            |-AppServer (2)
        |-Sources
    |-WinClient
        |-Dependencies
            |-AppServer (3)
        |-Sources
    

    AppServer s (2)(3)AppServer (1)的分支(作为第一类分支)。这一切都运作良好,符合我们的开发方案。

    现在,出现了麻烦。假设我们想要实现"每次发布分支" WebClient上的模式,意味着将整个WebClient层次分支到另一个地方。我们无法这样做,因为TFS2010不允许嵌套的第一类分支。

    为了增加挑战,我们设想分支层次结构(仅适用于WebClient,我们还有其他几个依赖和依赖项目)是这样的:

    WebClient
        |-Client1
        |    |-feature-1
        |    |-feature-2
        |    |-v1 Release
        |    |   |-v1 hotfix1
        |    |   |-v1 hotfix2
        |    |-v2 Release
        |        |-v1 hotfix1
        |        |-v1 hotfix2
        |
        |-Client2
             |-feature-1
             |-feature-2
             |-v1 Release
             |   |-v1 hotfix1
             |   |-v1 hotfix2
             |-v2 Release
                 |-v1 hotfix1
                 |-v1 hotfix2
    

    我们有什么选择?我能想到几个:

    1. 将第一类分支转换为文件夹。这将允许我们嵌套分支,但我们将失去跟踪和可视化,这是我不喜欢的。
    2. 我们可以以某种方式重构我们的依赖关系代码。但是我试着想了一段时间,但仍然没有看到答案。
    3. 我们可以从代码依赖关系切换到二进制依赖关系,但这会减慢我们的开发速度。
    4. 我想念任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

几点想法:

1)您可以将您的AppServer分支与WebClient分开并取消嵌套,只需使用TFS中的工作区映射功能来模拟您通过将AppServer分支到客户端分支中所定义的内容。这将允许开发人员选择他们想要的AppServer分支,并将其嵌套到正确位置的本地文件结构中,以方便他们的工作。

2)你声明通过使用二进制文件来减缓开发似乎是我将进一步探索并尝试测量和量化的东西。如果您的AppServer和客户端之间有明显的中断,那么我希望它们之间存在 no 依赖关系,而是一些可以由svcutil或其他工具生成的代理代码。如果是这种情况,并且您在某个过程中托管AppServer并从另一个过程中的客户端进行通信,我不明白为什么您需要实现原始结构。它似乎是不必要的耦合,我想知道它为什么要更详细地完成。