TFS分支推荐

7

我有一个名为“框架”的解决方案,它是我的业务逻辑和数据事务的C#程序集。

我有4个应用程序使用这个框架,包括1个网站、1个控制台应用程序和3种其他类型的应用程序。

$/TeamProject
    /Framework
        /Dev
        /Main
        /Release
    /WebApp
        /Dev
        /Main
        /Release
    /WCFApp
        /Dev
        /Main
        /Release

我在一个团队项目中拥有所有这些内容,每个程序集/应用都在自己的文件夹下。
我想为共享框架程序集的每个应用程序使用分支功能,但我不知道如何最好地分支应用程序和框架?
有什么建议吗?
我知道如何进行分支和合并,但所有示例都只演示了对包含在1个文件夹中的所有内容进行分支。

展示一下我的源代码控制中的文件目前是什么样子。 - Andy Clark
3个回答

7
根据代表您源代码控制目录的图片,我会做出以下假设: $/TeamProject /Framework /Console /Web /等等
首先要做的是在`$/TeamProject`中创建一个名为 `Main` 的文件夹(这将是您的主干分支),并将所有顶级文件夹移动到其中。现在我们有: $/TeamProject /Main /Framework /Console /Web /等等
现在需要将 `Main` 转换为分支。您可以右键单击 `Main` 文件夹,然后选择“转换为分支”来完成此操作。TFS现在允许您将 `$/TeamProject/Main` 分支到 `$/TeamProject/ConsoleV2`(例如),并在V2的控制台中开展功能工作。您可以在此分支中修改控制台应用程序和框架(如有必要)。完成此工作后,您可以反向集成(合并)更改回 `Main`。
请记住,不断地执行从 `Main` 到功能分支的前向集成合并(向下合并),并解决所有冲突,以保持代码库同步。通过采用这种方法,您可以在单个原子提交中修改任何产品的任何部分。例如,如果您在框架上添加了新的强制参数,则可以同时在所有应用程序中进行更改,并在RI合并到 `Main` 时更新所有内容。

我知道这种方法,但问题是如果我想与框架一起分支我的控制台应用程序,我必须同时分支所有东西...这是通常的方法吗?看起来有些过度了。 - Andy Clark
在源代码库中分支的起点不会改变它创建的分支的大小。我们使用这种方法来分支应用程序的几个不同部分,这些部分与版本无关,以便我们可以同时更新相关部分。您可以忽略您不工作的文件夹。 - DaveShaw
我已经添加了一个“可视化”的元素,展示了我的团队项目中源代码的当前结构。 - Andy Clark
2
Dave的建议基本上是标准方法。如果您正在为Web应用程序更改框架,并且这会破坏WCF应用程序中的代码,因为API正在更改,则可以将框架保留在原地并将稳定的二进制文件检入源代码控制。实际上,您正在将框架视为第三方库,例如“企业库”,其中您的Web应用程序引用版本2.0,而WCF应用程序引用版本1.2。所有这些都取决于在发生破坏性更改时修复它们或具有稳定依赖项之间的权衡。两种方法都有优缺点。 - James Reed
@DaveShaw 我已经苦思冥想几天了,关于如何处理这个问题,由于没有太多的选择,我认为这是最好的选择,特别是因为我有一个大的 sln 引用了所有项目,只是为了更容易地修复所有使用公共代码的地方,但像 Andy 一样,我也有疑虑,因为它似乎过度杀伐。无论如何,看到你的声望肯定有助于确认它是一个有效的选项。谢谢! - formatc
@Unavailable 这并不总是最好的方法,但当您的代码库足够小时,它可以帮助保持简单。分支是实现您想要的方式 - 找出您想要的可能是困难的部分。ALM Rangers在TFS分支和所有选项方面有很好的PDF文档 - http://vsarbranchingguide.codeplex.com/ 还有其他选择(例如将Framework作为NuGet包),我希望有一天能够写博客介绍。 - DaveShaw

2
我理解您的主要问题是“在依赖框架的应用程序中,什么是最好的分支结构?”如果您总是将它们一起构建并进行版本控制/发布,则将它们全部作为一个分支会更简单,更经济,就像DaveShaw所描述的那样。但是,如果每个应用程序由不同的团队开发,有不同的发布计划、不同的版本等,则需要在每个应用程序下创建一个“主”分支。在这种情况下,也应明确谁负责对框架进行更改。通常,对于像框架这样的共享项目,只允许那些需要访问的人进行控制。
如果后者是真的,那么我认为您当前的图形处理得很好,但我会做出一些改变;将您的“发布”保持在与“主”分支相同的层次结构中,以便相对路径保持不变,从而简化工作区映射:
$/TeamProject
    /Framework
        /Dev
        /Main
        /Release1
        /Release2
        /Release3
        ...
    /WebApp
        /Dev
        /Main
        /Release
            /Release1
            /Release2
            /Release3
            ...
    /WCFApp
    ...

-2

如果您想为单个项目实现分支和合并,那么在TFS下实现这一点的唯一方法是为解决方案中的每个项目创建一个单独的TFS项目。希望这样说得清楚。一旦您这样做了,就可以将每个项目的代码分支到您的工作目录中。

我们不久前将我们的代码从VSS迁移到了TFS。当时,我们必须决定将所有代码放入一个TFS项目中还是拆分它们。因此,我们有一个网站、一个业务库(被网站和其他应用程序使用)和一个数据层。我们为库、网站和数据层项目创建了单独的TFS项目。每个项目都会有一个主干分支。每个需要最新版本的人都会从主干分支分支出自己的副本,并将其合并回去。

希望这能帮到您。


那么你是如何将每个程序集合并到一个分支中的? - Andy Clark
这就是事实。每个开发人员都必须保留一个本地解决方案文件。所以,如果我需要网站、库和数据访问库,我会从TFS获取这些分支,并将它们放入我的解决方案中,但不会把解决方案提交。 - Skadoosh
看一下这些链接:https://dev59.com/TUbRa4cB1Zd3GeqPxBvM 和 https://dev59.com/IUfRa4cB1Zd3GeqP-ZmC - Skadoosh
我也发现这篇MSDN文章很有帮助:http://msdn.microsoft.com/zh-cn/magazine/gg598921.aspx - Skadoosh
在您的第二个和第三个评论中:我是否应该将框架和应用程序/网站等分别分支,然后在远离源代码控制的解决方案中将它们合并,完成后再分别合并它们? - Andy Clark
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接