我有一个名为“Framework”的解决方案,它是我的业务逻辑和数据事务的C#程序集。
我有4个应用程序使用Framework,1个网站,1个Console应用程序和3个其他类型的应用程序。
$/TeamProject
/Framework
/Dev
/Main
/Release
/WebApp
/Dev
/Main
/Release
/WCFApp
/Dev
/Main
/Release
我在一个团队项目中拥有所有这些,每个程序集/应用程序都位于自己的文件夹下。
我想为共享Framework程序集的每个应用程序使用分支功能,但我不知道将该应用程序与Framework一起分支的最佳方法是什么?
有什么建议吗?
我知道分支和合并是如何工作的,但所有示例都只展示了包含在1个文件夹中的所有内容。
答案 0 :(得分:7)
根据代表源控制目录的图片,我将做出以下假设:
$/TeamProject /Framework /Console /Web /etc.
首先需要做的是在Main
中创建一个名为$/TeamProject
的文件夹(这将是您的Main - aka trunk - branch)并将所有顶级文件夹移入其中。
那么我们就有了:
$/TeamProject /Main /Framework /Console /Web /etc.
现在您需要将Main
转换为分支,您可以通过右键单击Main
文件夹并选择“转换为分支”来执行此操作。 TFS现在允许您将$/TeamProject/Main
分支到$/TeamProject/ConsoleV2
(例如)并处理控制台V2的功能。如果在此分支中需要,您可以修改控制台应用程序和框架。完成此工作后,您可以将更改反向集成(合并)回Main
。
请记住继续执行从Main
到您的功能分支的正向集成合并(合并)并解决任何冲突以保持代码库同步。
通过采用这种方法,您可以在单个原子签入中修改任何产品的任何部分,例如,您更改框架上的API,向方法添加新的必需参数,您可以在所有方法中更改它您的应用程序同时进行,当您将RI合并到Main
时,所有内容都将更新。
答案 1 :(得分:2)
我理解的主要问题是“分支依赖于Framework的应用程序的最佳分支结构是什么?”如果你总是在一起构建和版本/发布它们,那么像DaveShaw所描述的那样将它们分支在一起会更简单,更便宜;但是,如果它们中的每一个都是由不同的团队开发,具有不同的发布时间表,具有不同的版本等等,那么您将希望在每个团队下创建一个MAIN分支。在这种情况下,还应该清楚谁拥有对Framework的更改。通常最好只控制那些需要它的人的签入访问权限,以便共享项目,比如Framework。
如果后一种情况属实,那么我认为你当前的图形很好地处理它,但我会做出一个改变;将您的版本保持在与MAIN分支相同的层次结构中,以使相对路径保持相同以进行引用;这将简化您的工作区映射:
$/TeamProject
/Framework
/Dev
/Main
/Release1
/Release2
/Release3
...
/WebApp
/Dev
/Main
/Release
/Release1
/Release2
/Release3
...
/WCFApp
...
答案 2 :(得分:-2)
如果你想要分支&合并单个项目,在TFS下实现这一目标的唯一方法是为解决方案中的每个项目创建一个单独的TFS项目。希望有道理。一旦你这样做,那么你就可以将每个项目的代码分支到你的工作目录中。
我们不久前将代码从VSS迁移到了TFS。那时,我们不得不决定将所有代码放入1个TFS项目中或者将它们分解出去。因此,我们有一个网站,一个商业图书馆(由网站和其他应用程序使用),一个数据层。我们为库,网站和数据层项目创建了一个单独的TFS项目。每个项目都有一个主干分支。每个需要最新版本的人都会从主干中分支他们自己的副本并合并回来。
希望有所帮助。