Visual Studio源代码控制集成如何与Perforce协同工作?

时间:2008-11-04 11:01:51

标签: visual-studio version-control perforce

我们正在使用Perforce和Visual Studio。每当我们创建一个分支时,除非我们使用“从源代码管理中打开”,否则某些项目不会被绑定到源代码控制,但其他项目无论如何都可以工作。根据我的调查,我知道其中涉及的一些事情:

在我们的.csproj文件中,有以下设置:

  • < SccProjectName>
  • < SccLocalPath>
  • < SccAuxPath>
  • < SccProvider>

有时它们都被设置为“SAK”,有时不是。如果这些说“SAK”,事情似乎更有可能发挥作用。

在我们的.sln文件中,有许多项目的设置:

  • SccLocalPath#
  • SccProjectFilePathRelativizedFromConnection#
  • SccProjectUniqueName#

(#是标识每个项目的数字。)SccLocalPath是相对于解决方案文件的路径。通常它是“。”,有时它是项目所在的文件夹,有时它是“..”或“.. \ ..”,它似乎不好指向上面的文件夹解决方案文件相对论的是该文件夹到项目文件的路径。如果SccLocalPath指向项目的文件夹,它将完全丢失。如果SccLocalPath中包含“..”,则此路径可能包含分支之间不同的文件夹名称,我认为这会导致问题。

所以,最后要了解我想知道的细节:

  • 当您执行“更改源代码管理”并绑定项目时会发生什么? Visual Studio如何决定将哪些内容放入项目和解决方案文件中?
  • 当您执行“从源代码管理中打开”时会发生什么?
  • SccLocalPath和SccProjectFilePathRelativizedFromConnection引用的“连接”文件夹是什么? Visual Studio / Perforce如何选择它?
  • 是否有一些推荐的方法可以使源控件绑定继续工作,即使您创建解决方案的新分支?

2012年6月添加: 我不再使用Perforce,所以我不能保证它,但请看下面的KCD's answer。显然正在开发a new P4 VS plugin。希望它能清除所有这些混乱!

9 个答案:

答案 0 :(得分:102)

答案 1 :(得分:22)

米兰的帖子经过精心研究和精心编写,但其长度超出了人们对P4SCC模型被打破的疑虑。在项目中存储源控件绑定信息&解决方案文件很荒谬。强制执行(通过sccprojectname)项目只是一个解决方案的一部分同样荒谬。

此外,P4SCC在大型解决方案中具有巨大的性能成本,因为它在启动时从每个文件的源代码控制中检索信息,并在整个开发会话期间在内存中维护该状态。它以无信息的形式创造了额外的残余.vsscc& vssscc文件支持Perforce不使用的某些SCC功能(AFAICT)。

理想的Perforce集成如下:

  • 如果我创建新的解决方案,项目或项目项目,请运行'p4 add'。
  • 如果我更改了文件,请运行“p4 edit”。
  • 某些工具栏/上下文菜单集成了修订历史,修订图,游戏中时光倒流/责备以及'在P4 gui中显示'。
  • (很高兴)如果我重命名仓库中存在的文件,请运行'p4 integrate'和'p4 delete'。如果我重命名为add添加的文件,请运行'p4 revert'和'p4 add'。
  • 这就是全部

我们已完全远离P4SCC及其奇怪的要求和负担。相反,我们使用NiftyPerforce。有一些错误,但我们发现解决这些错误比解决Perforce< - > VSSCC模型中的设计缺陷更不令人沮丧。

答案 2 :(得分:9)

为了保持最新状态 - P4VS插件已于2012年左右重写

  

现在,您可以执行所有日常工作   与Perforce自然交互,例如检入代码和查看文件历史记录,   直接来自IDE。

     

如果你是高级用户寻求更多,P4VS不会让人失望。   P4VS与Perforce Streams和Stream Graph完全兼容   可以从IDE访问,以及延时视图和修订   图形。如果您负责分支管理,则可以合并   来自P4VS。

     

而且,如果您远程工作或想要进行一些私人分支,   P4Sandbox可以通过P4VS配置。

答案 3 :(得分:5)

通过使用P4CONFIG环境变量,可以简化在Visual Studio中使用Perforce。

基本上你进入Visual Studio,工具 - >选项 - >源控制 - >插件设置,高级按钮。这将打开特定于SCC集成的Perforce配置对话框。切换到“连接”选项卡,然后选中标题为“绑定与Perforce环境设置匹配的工作区”的单选按钮。这将告诉perforce更喜欢使用P4CONFIG环境变量来确定您所处的环境。在编辑 - >下的P4V中存在相同的对话框。偏好,但只影响p4v的行为。

如何设置P4CONFIG环境变量在某种程度上取决于您。我喜欢让它们在任何地方都被命名为相同,所以我设置了一个系统范围的环境变量P4CONFIG来寻找名为p4config.cfg的文件。此文件只是一个ini样式文件,您可以在其中分配其他变量,如P4USER,P4CLIENT,P4HOST等.Perforce将在当前目录和所有父目录中搜索此文件,直到遇到一个。基本上,您将此文件放在您的clientspec映射到硬盘驱动器上的根目录最多的目录中,并且不管它。

这种方法大大减少了SCC配置在Visual Studio中运行所需的“正确性”。 (SAK绑定工作正常等。)

如果首次将您的代码从perforce同步到完全干净的目录结构,并且获得一个抱怨perforce想要暂时脱机工作或删除绑定的对话框,那么仍然需要进行一些编辑。主要是.sln文件本身需要修改,因此它知道sln有自己的SCC绑定。这是通过确保在.sln文件中的SccNumberOfProjects之后立即放置以下字段来完成的。

SccProjectName0 = Perforce\u0020Project
SccProvider0 = MSSCCI:Perforce\u0020SCM

如果您使用的是P4CONFIG方法,所有单个项目都可以使用默认的“SAK绑定”。解决这个问题应该允许Perforce完美地完成干净同步,并且还可以消除每个项目目录中MSSCCPRJ.SCC伪装的产生。

答案 4 :(得分:4)

如果使用Visual Studio P4插件集成,支持重命名文件或将其移动到新文件夹目录糟糕并且很痛苦。没有内置功能可以警告P4重命名文件或移动文件。

问题是重命名文件不仅需要更新关联的VS项目文件,而且如果要维护正确的修订历史记录,还需要通知Perforce更改。

目前,如果使用VS集成,我在单个操作中看不到两种方法。相反,你必须:

  1. 从Perforce客户端
  2. 重命名/移动文件
  3. 删除VS
  4. 中项目文件中的旧文件名引用
  5. 在VS
  6. 中的项目文件中添加新文件名引用
  7. 提交您的更改
  8. 如果您使用持续集成构建过程并在最后一步之前的任何时候提交更改,那么您将确保构建已损坏。

    问题显着放大了需要重命名或移动的文件。这不是一个平稳的过程。

答案 5 :(得分:3)

在尝试了米尔加迪安的非常丰富的答案后,我想我可以提供一个更简单的解决方案,让它运作良好。

正如Weeble所提到的,当其他所有设置正确时,SAK值工作正常,它们通常是默认值(但我认为它取决于它是哪种项目类型)。如果它们没有出现在您的项目中,只需粘贴此属性组即可。

<PropertyGroup>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>

将这两行添加到SourceCodeControl GlobalSection中的* .sln。只要项目文件具有SAK值,它们就应该继承解决方案中的名称。

SccProjectName0 = Perforce\u0020Project
SccProvider0 = MSSCCI:Perforce\u0020SCM

不需要签入* .vssscc,* .vspscc或* .SCC文件(虽然它们将在解决方案打开时生成)。

答案 6 :(得分:2)

非常糟糕。我知道这不是你正在寻找的问题的答案(将来,也许你可以缩小焦点?),但是与Visual Studio的源代码控制集成很糟糕。原因是他们都必须使用微软糟糕的SCC界面。这是可悲的!他们将源控制信息放在项目文件中!他们为什么要这样做?

放弃Visual Studio集成并使用Perforce客户端。这不是额外的工作。您无法每天30秒切换到Perforce客户端并从那里签入/退出文件?

答案 7 :(得分:1)

我可以回答最后一个。

为了使源控件绑定即使在您创建新分支时也能正常工作,请遵循严格的层次结构:

/Solution
  /library1
  /library2
  /product1
  /product2
  /subsolution
    /sublibrary1
    /subproduct1

每个文件必须只有一个.vcproj。您可以在同一目录中拥有多个.vcproj,但如果它们共享文件,则共享文件必须进入它们自己的.vcproj。

如果你坚持不懈,所有Scc的东西都是相对路径,所以一个新的分支将起作用(因为它只会改变最顶层的目录)。

答案 8 :(得分:-1)

这不是Perforce问题,而是Visual Studio问题。修改源文件以允许Visual Studio了解正在使用SCM工具的荒谬要求是愚蠢的。

简单的答案是“停止使用Visual Studio源代码控制集成”。它简直太糟糕了。即使使用TFS,它也很简单。

如果您希望能够从Visual Studio中签出,只需创建一个自定义工具即可。只需用适当的VS变量简单调用'p4 edit'就可以了。想要还原文件?同样的想法......用适当的变量调用p4 revert。完成。

使用p4v管理源代码控制需求(提交,历史记录,差异等)Visual Studio作为源编辑器。它作为SCM界面很糟糕。