【问题标题】:How to avoid nested branches caused by source code dependency hierarchy如何避免源代码依赖层次导致的嵌套分支
【发布时间】:2012-10-02 11:38:59
【问题描述】:

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

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

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

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

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

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

现在,麻烦来了。假设我们想在WebClient 上实现“branch-per-release”模式,这意味着将整个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. 我们可以从代码依赖切换到二进制依赖,但这会减慢我们的开发速度。

有什么我想念的解决方案吗?

【问题讨论】:

    标签: tfs branch dependency-management


    【解决方案1】:

    几个想法:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2013-05-21
      • 2013-10-09
      • 2011-06-21
      • 1970-01-01
      • 2015-04-10
      • 2021-03-23
      • 2014-12-08
      相关资源
      最近更新 更多