我们正在尝试在我们的小型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更好地工作?
答案 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文件的副本,带有相对引用,一切都按预期工作。