Version control 性能,在多个解决方案之间共享项目

Version control 性能,在多个解决方案之间共享项目,version-control,perforce,Version Control,Perforce,更新: 因此,我们可能在VisualStudio2003中发现了一个bug(我知道……这并不奇怪)。我们发现,如果使用VisualStudio将解决方案添加到存储库中(使用将解决方案添加到源代码管理),那么一切都会顺利进行…如图所示 因此,我们正在将VSS存储库(如果可以这样称呼的话)转换为Perforce,并且我们遇到了多个解决方案中包含的项目的问题 我们的存储库可能如下所示 //仓库 德夫曼 解决方案1 Project1(构建到DLL) 解决方案2(将项目1作为项目参考) 项目

更新

因此,我们可能在VisualStudio2003中发现了一个bug(我知道……这并不奇怪)。我们发现,如果使用VisualStudio将解决方案添加到存储库中(使用将解决方案添加到源代码管理),那么一切都会顺利进行…如图所示


因此,我们正在将VSS存储库(如果可以这样称呼的话)转换为Perforce,并且我们遇到了多个解决方案中包含的项目的问题

我们的存储库可能如下所示

  • //仓库
    • 德夫曼
      • 解决方案1
        • Project1(构建到DLL)
      • 解决方案2(将项目1作为项目参考)
        • 项目2
      • 解决方案3(将项目1作为项目参考)
        • 项目3
在Visual Studio for Solution2中使用集成源代码管理时,它会抱怨项目不在当前解决方案文件夹下,我们可能希望将其移动。因为多个解决方案引用项目1,所以我们无法在一个解决方案不会抱怨的情况下组织它

将Project1构建为DLL并将其存储在Lib文件夹中是最佳做法吗?还是有更好的办法


谢谢。

解决方案应该是在每次将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目录中的项目平面列表中,多个解决方案可以引用它们)
  • 多个产品使用的项目(添加到共享目录,被视为第三方库,其版本独立于产品)

我尝试了这个……我输入了我的P4信息以重新绑定项目,之后我得到一个弹出窗口,说明了非常有用的“未指定错误”。装订从不需要。。。而且…这个解决方案的可扩展性似乎不是很好…每个开发人员都必须为每个解决方案经历这个仪式?