Version control 性能,在多个解决方案之间共享项目
更新: 因此,我们可能在VisualStudio2003中发现了一个bug(我知道……这并不奇怪)。我们发现,如果使用VisualStudio将解决方案添加到存储库中(使用将解决方案添加到源代码管理),那么一切都会顺利进行…如图所示Version control 性能,在多个解决方案之间共享项目,version-control,perforce,Version Control,Perforce,更新: 因此,我们可能在VisualStudio2003中发现了一个bug(我知道……这并不奇怪)。我们发现,如果使用VisualStudio将解决方案添加到存储库中(使用将解决方案添加到源代码管理),那么一切都会顺利进行…如图所示 因此,我们正在将VSS存储库(如果可以这样称呼的话)转换为Perforce,并且我们遇到了多个解决方案中包含的项目的问题 我们的存储库可能如下所示 //仓库 德夫曼 解决方案1 Project1(构建到DLL) 解决方案2(将项目1作为项目参考) 项目
因此,我们正在将VSS存储库(如果可以这样称呼的话)转换为Perforce,并且我们遇到了多个解决方案中包含的项目的问题 我们的存储库可能如下所示
- //仓库
- 德夫曼
- 解决方案1
- Project1(构建到DLL)
- 解决方案2(将项目1作为项目参考)
- 项目2
- 解决方案3(将项目1作为项目参考)
- 项目3
- 解决方案1
- 德夫曼
谢谢。解决方案应该是在每次将Solution1添加到新项目时将其重新绑定到源代码管理服务器。(在文件->源代码管理->更改源代码管理下。)
每个解决方案只需要在每台桌面上执行一次。
< p>我不太了解使用VisualStudio和PrimCE,但您可以考虑创建将Sjuts1映射到SoulEng2、SoDrim3等的工作区视图,需要时。如果我理解正确,您希望您的文件在磁盘上的存储方式不同于在Performance中的存储方式。如果是这种情况,并且您不能简单地在VS中重新定义引用,那么设计巧妙的客户机就可以做到这一点Client: Client_Solution2
Description:
Created by Me.
Root: C:/Development/Solutions
View:
//depot/Devmain/Solution1/... //Client_Solution2/Solution2/Solution1/...
//depot/Devmain/Solution2/... //Client_Solution2/Solution2/...
这将为您提供一个结构,其中Solution1是Solution2的子目录。我们遇到了一个类似的问题,并且正在通过客户端规范处理它,就像@Toby Allen在其回答中提到的那样。然而,随着时间的推移,这变得非常痛苦(随着客户规范变得越来越复杂,建立一个新的团队成员变得越来越困难;自动化也变得更加复杂,因为事情是……“不断变化的”:-) 最终,我们改进了策略,使用目录结构和分支。目录结构如下:
//depot
/products
/(product_name)
/doc
/lib
/(3rd_party_libname)
(DLLs)
/(another_3rd_party_libname)
(DLLs)
/src
/Project1
(files, csproj, vbproj, etc)
/Project2
(files, csproj, vbproj, etc)
/Project3
(files, csproj, vbproj, etc)
Solution1.sln (includes src/Project1)
Solution2.sln (includes src/Project1, src/Project2)
Solution3.sln (includes src/Project1, src/Project3)
/(another_product_name)
/doc
/lib
/src
(solutions)
/shared
/(shared_lib_name)
/doc
/lib
/src
(solutions)
/(another_shared_lib_name)
/doc
/lib
/src
(solutions)
请注意,相同的结构在整个结构中重复(doc/lib/src/solutions)。Lib包含“外部”库—项目参考中包含的第三方库。Src包含属于特定产品的所有项目的平面列表。然后使用解决方案以多种方式“组合”项目。我认为src目录是一个带有“什么是可用的”的容器,然后解决方案从这个容器中挑选并组合项目(根据需要)
在多个产品之间共享的库进入共享目录。一旦进入共享目录,它们就被视为独立于产品-它们有自己的发布周期,并且从未作为源加入到产品中。通过将共享库发布程序集分支到产品的lib目录->将共享库拉入产品中,从产品的角度来看,第三方库和共享库之间没有区别。这使我们能够控制什么产品正在使用什么版本的共享库(当一个产品需要新功能时,它必须明确地在较新版本的共享库中分支,就像它将包括一个新版本的第三方库一样,带有所有的优缺点)
总之,我们的结构有两种“类型”的共享库的概念:
- 一个产品的本地项目,由多个解决方案使用(包括在src目录中的项目平面列表中,多个解决方案可以引用它们)
- 多个产品使用的项目(添加到共享目录,被视为第三方库,其版本独立于产品)