乍一看,我们的问题非常普遍.我们有AppServer,WebClient和WinClient. WebClient和WinClient都依赖于AppServer.还有两个限制:
>我们更喜欢包含特定版本的已使用依赖项
>我们更喜欢包含源代码而不是二进制文件,因为它更容易实现和测试来自特定源的AppServer更改,例如WinClient.
我们选择以下文件夹结构:
\ |-AppServer (1) |-WebClient |-Dependencies |-AppServer (2) |-Sources |-WinClient |-Dependencies |-AppServer (3) |-Sources
AppServers(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)您可以将您的AppServer分支与WebClient分开并取消嵌套,只需使用TFS中的工作区映射功能来模拟您通过将AppServer分支到客户端分支中所定义的内容.这将允许开发人员选择他们想要的AppServer分支,并将其嵌套到正确位置的本地文件结构中,以方便他们的工作.
2)你的陈述通过使用二进制文件看起来像我将进一步探索并试图测量和量化的东西来减缓开发.如果您的AppServer和客户端之间有明显的中断,那么我希望它们之间没有依赖关系,而是可以通过svcutil或其他工具生成的一些代理代码.如果是这种情况,并且您在某个过程中托管AppServer并从另一个过程中的客户端进行通信,我不明白为什么您需要实现原始结构.它似乎是不必要的耦合,我想知道它为什么要更详细地完成.