4

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

乍一看,我们的问题很常见。我们有AppServer和。两者都依赖于. 还有两个额外的限制:WebClientWinClientWebClientWinClientAppServer

  1. 我们更喜欢包含使用依赖项的特定版本
  2. 我们更喜欢包含源代码而不是二进制文件,因为它更容易实现和测试AppServer来自特定来源的更改,例如WinClient.

我们选择以下文件夹结构:

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

AppServers(2)(3)是 的分支(作为一级分支)AppServer (1)。这一切都运行良好,符合我们的开发场景。

现在,麻烦来了。假设我们想在 上实现“branch-per-release”模式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 回答 1

1

几个想法:

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

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

于 2012-10-02T03:38:59.173 回答