Version control 如何在不分支整个解决方案的情况下,为微小更改(2.0到2.1)分支单个类库

Version control 如何在不分支整个解决方案的情况下,为微小更改(2.0到2.1)分支单个类库,version-control,tfs,branching-and-merging,Version Control,Tfs,Branching And Merging,解决方案 问题在解决方案下面。离开Scott Bruns建议的版本分支可能是我们的问题,我决定彻底阅读Team Foundation Server 2010文档,以及微软模式和实践。使用的资源如下: TeamCollection TeamProject Code 1.0 Project1 Project2 Project3

解决方案

问题在解决方案下面。离开Scott Bruns建议的版本分支可能是我们的问题,我决定彻底阅读Team Foundation Server 2010文档,以及微软模式和实践。使用的资源如下:

TeamCollection
    TeamProject
        Code
            1.0
                Project1
                Project2
                Project3
                MyClassLibrary
            1.1
                Project1
                Project2
                Project3
                MyClassLibrary
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            ...
TeamCollection
    TeamProject
        Code
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            2.1
                MyClassLibrary
第5章-定义分支和合并策略

我选择使用以下结构

TeamCollection
    TeamProject
        Development
            Feature A
            Feature B
        Main
            TeamApplication
                Code
                    Project1
                    Project2
                    Project3
                    MyClassLibrary
                Documents
        Releases
            1.0
            2.0
            2.1
对此的理解相当简单。主代码库位于main中,包含整个代码库,但不包含多个副本或多个版本。此外,如果功能需要开发,可以将单个项目分支到开发分支中,而不是将整个解决方案分支。结果是更改将合并回主存储库。这提供了隔离,以便在开发特性时不会破坏主代码库

因此,这如何解决我维护不同构建的问题,就是当发布一个新构建时,整个解决方案将分支到发布中。因此,从本质上讲,每个版本都包含源代码的完整副本,这是有意义的。因此,可以为特定版本提供修补程序、bug和维护,并在修补程序和更改稳定后将其合并回主存储库

因此,最终,主代码库基本上总是软件的最新稳定版本,而开发隔离了功能和未经测试的代码,发布隔离了您的版本并允许发布后维护

导致解决方案的问题的另一部分是,我们需要为任何类型的不是“修复”的更改进行分支。了解到只有在绝对必要时才应该进行分支,我们现在将对现有代码库应用修复、更改等,并进行合并,而不是创建整个新分支

我希望我能解释清楚。我仍然感受到Team Foundation Server 2010并学习这一点。通过全面阅读MSDN文档、模式和实践等,可以获得很多答案。有些事情一开始有点难以理解,但最终你会理解的

希望这能帮助任何有类似情况的人。我仍然粗略地介绍了一种分支特性的好方法,不管main中的整个代码库应该是分支的还是单个项目。比如说,如果只需要添加WinForm的一个新部分,就应该能够只分支表单文件,但是没有项目,就没有设计器,所以像这样的小事情似乎是个问题

问题

我在这里对版本控制分支做了一些搜索,关于分支结构和策略,但这些问题或答案都不符合我的具体场景,所以我们开始

我的源代码管理结构如下:

TeamCollection
    TeamProject
        Code
            1.0
                Project1
                Project2
                Project3
                MyClassLibrary
            1.1
                Project1
                Project2
                Project3
                MyClassLibrary
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            ...
TeamCollection
    TeamProject
        Code
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            2.1
                MyClassLibrary
我用于分支的常用方法是只分支整个版本目录。假设我想从版本2.0中创建一个新功能,我会将整个2.0文件夹分支到2.1

我现在用这种方法遇到的问题是,这个项目的大小是444mb,所以用我目前的分支方法,每个版本都是444mb,并且占用了大量的磁盘空间。另一个问题是,不必为所有不需要更改的文件创建副本

在这个项目中,我有一个类库,我想从2.0分支到2.1。我只需要对库做一个小的更改,但希望将此更改与2.0代码库分开。我现在面临的问题是理解我应该如何着手处理这个分支

如果我的分支机构如下:

TeamCollection
    TeamProject
        Code
            1.0
                Project1
                Project2
                Project3
                MyClassLibrary
            1.1
                Project1
                Project2
                Project3
                MyClassLibrary
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            ...
TeamCollection
    TeamProject
        Code
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
            2.1
                MyClassLibrary
我试图理解如何构建整个产品的发布版,但如果类库与其他项目隔离,则包括类库的2.1版。我不一定希望将2.0代码库更改为引用2.1类库,因为2.1不应该是2.0的一部分

我的另一个想法是:

TeamCollection
    TeamProject
        Code
            2.0
                Project1
                Project2
                Project3
                MyClassLibrary
                MyClassLibrary-2.1 (following the default suggestion of TFS Explorer)
这在某种程度上是有意义的,因为2.1分支是代码库2.0的一个子集,因为这是一个较小的功能更改,但这也为大型项目创建了一个极其混乱的文件系统层次结构,而且,我正在尝试理解如何在不更改版本2.0中的引用的情况下构建整个项目的版本2.1。同样,2.1应该是2.0的独立版本

我唯一的解决方案是再次分支整个项目,但我正试图为此寻求专业帮助,因为该项目的规模越来越大,分支所有444mb应该是不必要的


我想使用我建议的第一个选项,在我有2.1/MyClassLibrary的地方,但我真的需要帮助理解如何在2.1目录中仅使用单个项目创建整个产品的构建。

按版本分支可能是您的基本问题

为什么要求您在不同文件夹中使用不同版本的应用程序?您真的需要同时处理多个版本的代码吗

在我们的环境中,我只需要将版本2.0(或2.1等)放入相同的文件夹结构中(当然不是同时)。我不需要额外的444mb磁盘空间


当然,你的环境/分支选择可能会有很大的不同。

因为Team Foundation Server确实跟踪服务器上的本地状态,所以你可以用它来做一些很酷的把戏。使用广告不佳的
/remap
标记到
tf get
将允许您切换到其他分支,并仅下载差异

例如,假设您在2.0版中工作,并且已将
$/TeamProject/code/2.0
映射到
C:\Work\code>