Perforce,Visual Studio和分支

时间:2010-05-20 16:09:09

标签: visual-studio-2008 perforce branch

我们正在尝试在我们的小型IT部门实施perforce。我们主要使用visual studio 2008在.net中开发。我按如下方式组织了我的项目:

Customer
    Product
        main_line
        version_1
        version_2
Libraries
    Library_Name
        main_line
        version_1

main_line / version文件夹包含解决方案文件以及解决方案中主项目的代码文件。该解决方案通常包括“库”层次结构中包含的一个或多个项目,这些库项目通常包含在多个解决方案中。在perforce中,只要我将源代码控制应用于单个项目而不是整个解决方案,这似乎工作正常。实际上,如果我尝试获取共享公共项目/库的控制解决方案,那么perforce插件或visual studio本身都会给我一个警告。

当我尝试分支解决方案时,问题就开始发生了。由于我不是源控制整个解决方案,因此.sln文件不会被复制到分支目录,我怀疑由于文件映射不正确而无法使用。我的问题是,我做错了什么或是视觉工作室解决方案的分支总是这么痛苦?有没有更好的办法? Perforce似乎只适用于简单的解决方案。是否有一个源代码控制产品可以与visual studio更好地工作?

2 个答案:

答案 0 :(得分:2)

我认为Perforce是问题的一小部分。您没有提到当您尝试共享公共项目/库时遇到的具体问题,以及您尝试这样做的方式。

我假设你想为每个产品版本使用稳定的库版本?我建议您将库以正确的版本分支到产品库的路径下的某个位置。根据项目的性质,您还可以在产品工作区内构建库,并检查工件(例如dll)以获得简单且可重现的构建。例如:

//depot
    /customer
        /product
            /MAIN
                /deps
                    /src
                        /lib1 ... (branched from lib1/REL1 below)
                    /bin
                        /lib1 ... (prebuilt libs)
//depot
    /libs
        /lib1
            /MAIN
            /REL1

将“// depot / customer / product / MAIN / deps / src / lib1 / ...”路径视为只读。按惯例执行此操作是最简单的方法,但您可以自定义Perforce中的保护映射以强制执行此操作。不要这样做,除非你确实需要它,因为你会增加复杂性。

完成此操作后,您可以轻松地将整个产品的解决方案文件添加到Perforce。 (解决方案不需要直接引用库“,因为您不会在产品的上下文中处理它。)

根据产品的性质和组成,您可能会想要对产品的不同部分(exes,libs,安装程序)使用“subsolutions”,以便在产品的不同部分同时工作更容易一些。 Perforce具有出色的合并功能,但我更愿意尝试避免合并解决方案/项目文件。

如果您希望发布新版本的“产品”,请将MAIN下的所有内容分支到例如REL1(包括依赖部分)。如果新产品版本需要更新版本的lib,您只需“p4删除”产品库路径下的适用内容,并按上述方法分支/集成正确的版本。

注意:应该可以只执行从新版本的lib到例如lib的集成。 deps / libs / src / lib1 /产品的位置,因为它们有共同的祖先。我对此并不是100%肯定,所以我建议从p4删除/整合新方法开始。

注意2:解决方案和项目文件中的路径通常与解决方案/项目文件本身相关,因此在这方面分支应该可以正常工作。只是不要自己使用绝对路径添加对其他文件/目录的引用。

答案 1 :(得分:0)

我设法很好地解决了这个问题。对我来说似乎造成问题的是将我的解决方案文件(.sln)放在与我的启动/主项目的代码相同的目录中。我将项目代码移动到了实际解决方案下一层的自己的子文件夹中。

Customer
    Product
        main_line
           sln_file
           src
              code
    Library_Name
        main_line
           src

这允许我在sln_file中创建所有项目引用。然后我通过visual studio插件将src文件夹中的代码添加到软件仓库。我单独添加项目,而不是整个解决方案。唯一的问题是我必须直接通过p4v管理sln文件,但由于它不会经常改变所有这些,这不是一个真正的问题。现在,当我分支main_line时,我得到了.sln文件的副本,带有相对引用,一切都按预期工作。