Solution
问题在于解决方案 . 关于Scott Bruns建议按版本分支可能是我们的问题,我决定彻底阅读Team Foundation Server 2010文档以及Microsoft模式和实践 . 使用的资源如下:
第5章 - 定义分支和合并策略http://msdn.microsoft.com/en-us/library/bb668955.aspx
我选择使用以下结构 .
TeamCollection
TeamProject
Development
Feature A
Feature B
Main
TeamApplication
Code
Project1
Project2
Project3
MyClassLibrary
Documents
Releases
1.0
2.0
2.1
对此的理解非常简单 . 主代码库位于Main中,包含完整的代码库,但不包含多个副本或多个版本 . 此外,如果开发了一个功能,则可以将一个项目分支到开发分支,而不是分支整个解决方案 . 结果是更改将合并回主存储库 . 这提供了隔离,以便在开发特征时,它不会破坏主代码库 .
因此,这如何解决我维护不同构建的问题,就是在发布新构建时,这就是整个解决方案将分支到Releases的情况 . 因此,基本上,发行版包含每个版本的源代码的完整副本,这是有道理的 . 因此,可以为特定版本提供修补程序,错误和维护,并在修复和更改稳定后合并回主存储库 .
因此,最终,主代码库基本上始终是软件的最新稳定版本,而开发隔离功能和未经测试的代码,并且版本隔离了您的构建并允许发布后维护 .
导致解决方案的问题的另一部分是认为我们需要分支任何类型的不是“修复”的变更 . 了解您应该只在绝对必要时进行分支,我们现在将修复,更改等应用于现有代码库并合并,而不是创建整个新分支 .
我希望我能很好地解释这一点 . 我仍然对Team Foundation Server 2010感觉很好并且学到了这一点 . 通过仔细阅读MSDN文档,模式和实践等,可以获得许多答案 . 其中一些起初有点难以理解,但最终你会流行起来 .
希望这可以帮助任何有类似情况的人 . 我仍然粗略地提出了一种分支功能的好方法,无论是main的整个代码库是分支还是单个项目 . 就像只需要添加WinForm的新部分一样,应该只能分支表单文件,但没有项目就没有设计师,所以像这样的小事似乎是一个问题 .
Question
关于分支结构和策略,我在SO上进行了一些关于版本控制分支的搜索,但这些问题或答案都不适合我的特定场景,所以我们开始吧 .
我的源代码控制结构如下:
TeamCollection
TeamProject
Code
1.0
Project1
Project2
Project3
MyClassLibrary
1.1
Project1
Project2
Project3
MyClassLibrary
2.0
Project1
Project2
Project3
MyClassLibrary
...
我用于分支的常用方法是分支整个版本目录 . 假设我想从2.0版本创建一个新功能,我会将整个2.0文件夹分支到2.1 .
我现在遇到的这个方法的问题是这个项目的大小是444mb,所以我目前的分支方法是444mb,并且占用了大量的磁盘空间 . 另一个问题是没有必要创建所有不需要更改的文件的副本 .
在项目中,我有一个类库,我想从2.0分支到2.1 . 我需要对库进行一些小改动,但是想要将此更改与2.0代码库分开 . 我遇到的问题是理解我应该如何进行分支 .
如果我分支如下:
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.1版,而不更改版本中的引用2.0 . 同样,2.1应该是与2.0的单独构建 .
我唯一的解决方案是再次分支整个项目,但我正在努力寻找专业帮助,因为项目规模变大,分支全部444mb不是必需的 .
我想使用我建议的第一个选项,我有2.1 / MyClassLibrary,但我真的需要帮助了解如何创建整个产品的构建,只有2.1目录中的单个项目 .
2 回答
按版本分支可能是您的基本问题 .
为什么需要在不同文件夹中处理不同版本的应用程序?你真的需要同时处理多个版本的代码吗?
在我们的环境中,我只是将版本2.0(或2.1等)放到相同的文件夹结构中(当然不是在同一时间) . 我不需要额外444mb的磁盘空间 .
当然,您的环境/分支选择可能会有很大差异 .
由于Team Foundation Server确实在服务器上跟踪您的本地状态,因此您可以使用它来做一些很酷的技巧 - 例如,使用标记不佳的
/remap
标志tf get
将允许您切换到另一个分支并仅下载差异 .例如,让's say you'在2.0版中重新运行,并且
$/TeamProject/Code/2.0
映射到C:\Work\Code
. 如果您要删除$/TeamProject/Code/2.0
的工作文件夹映射,然后将$/TeamProject/Code/2.1
映射到C:\Work\Code
,则可以运行tf get /remap
,它只会下载分支之间的差异 .