Visual studio Visual Studio';s与Performce的源代码管理集成工作?

Visual studio Visual Studio';s与Performce的源代码管理集成工作?,visual-studio,version-control,perforce,Visual Studio,Version Control,Perforce,我们正在使用Perforce和visualstudio。每当我们创建一个分支时,除非我们使用“开源控制”,否则某些项目将不绑定到源代码管理,但其他项目无论如何都可以工作。从我的调查中,我知道了一些相关的事情: 在.csproj文件中,有以下设置: 有时它们都设置为“SAK”,有时不设置。如果上面写着“SAK”,事情似乎更有可能发生 在我们的.sln文件中,有许多项目的设置: SccLocalPath# SCCProjectFilePathRelatizedFromConnectio

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

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

有时它们都设置为“SAK”,有时不设置。如果上面写着“SAK”,事情似乎更有可能发生

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

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

所以,为了最终了解我想知道的细节:

  • 当您“更改源代码管理”并绑定项目时会发生什么?VisualStudio如何决定在项目和解决方案文件中放置什么
  • 当您“从源代码控制打开”时会发生什么
  • SccLocalPath和SCCProjectFilePathRelativedFromConnection所指的“连接”文件夹是什么?Visual Studio/Perforce如何选择它
  • 是否有推荐的方法使源代码管理绑定即使在创建解决方案的新分支时也能继续工作

2012年6月新增:
我不再使用Perforce了,所以我不能担保,但请看下面的内容。很明显,这是在开发中。希望它能把这些乱七八糟的东西清理干净

我能回答最后一个问题

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

/Solution
  /library1
  /library2
  /product1
  /product2
  /subsolution
    /sublibrary1
    /subproduct1
每个文件必须正好位于一个.vcproj中。同一目录中可以有多个.vcproj,但如果它们共享文件,则共享文件必须放在各自的.vcproj中


如果你对此毫不留情,那么所有的Scc内容都将是相对路径,因此一个新的分支将起作用(因为它只会更改最顶层的目录)。

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


只需放弃VisualStudio集成,使用Perforce客户端即可。没有那么多额外的工作。您不能每天花30秒切换到Performance客户端并从那里签入/签出文件?

如果使用Visual Studio P4插件集成,那么重命名文件或将其移动到新文件夹目录的支持将是可怕和痛苦的。不存在提醒P4重命名文件或文件已被移动的内置功能

问题在于,重命名文件不仅需要更新关联的VS项目文件,而且如果您想保持正确的修订历史记录,还需要将更改通知Performce

目前,如果使用VS集成,我看不到一种方法可以在单个操作中同时完成这两项工作。相反,您必须:

  • 从Perforce客户端中重命名/移动文件
  • 在VS中删除项目文件中的旧文件名引用
  • 在VS中的项目文件中添加新的文件名引用
  • 提交您的更改
  • 如果您使用持续集成构建过程,并且在最后一步之前的任何时候提交更改,则保证您的构建已中断

    当需要重命名或移动的文件越多,问题就越严重。这绝对不是一个平稳的过程。

    引言 我不同意Visual Studio中的Performce集成“糟糕”的说法。相反,我将其定义为“开箱即用的体验不是最佳的”:-。以下各节讨论我对集成的理解以及项目/解决方案设置的建议

    如果您对源代码管理集成如何工作的细节不感兴趣,可以跳到本答案的末尾,在这里我总结了Weeble问题的答案

    免责声明:以下部分只是基于我的经验的有根据的猜测,但是我在许多项目中使用了多年的技术(每个项目都有多个实验/主干/维护/发布分支,有时甚至有多个解决方案文件,没有问题)。缺点是您必须手动更新项目文件-但是2分钟的投资在项目的生命周期内进行摊销(IMHO:-)

    解决方案与项目 VisualStudio在初始解决方案加载期间使用解决方案文件和每个项目文件中的源代码管理绑定信息。然后,此绑定信息存储在name.suo文件中(假设我们使用name.sln作为解决方案)-请注意suo文件被标记为hidden标志,因此它们在文件资源管理器中不可见(除非您覆盖“隐藏文件和文件夹”选项)

    如果出现任何问题,重新绑定到源代码管理提供程序的最简单方法是删除相应的suo文件并重新打开解决方案。创建suo文件后,对图元的更改将无效

    如果
    GlobalSection(SourceCodeControl) = preSolution
        SccNumberOfProjects = 1
        SccLocalPath0 = .
        SccProjectName0 = Tutorial
        SccProvider0 = MSSCCI:Perforce\u0020SCM
    EndGlobalSection
    
    <PropertyGroup>
        ...
        <SccProjectName>Tutorial</SccProjectName>
        <SccLocalPath>..\..</SccLocalPath>
        <SccProvider>MSSCCI:Perforce SCM</SccProvider>
        ...
    </PropertyGroup>
    
    <PropertyGroup>
        <SccProjectName>SAK</SccProjectName>
        <SccProvider>SAK</SccProvider>
        <SccAuxPath>SAK</SccAuxPath>
        <SccLocalPath>SAK</SccLocalPath>
    </PropertyGroup>
    
    SccProjectName0 = Perforce\u0020Project
    SccProvider0 = MSSCCI:Perforce\u0020SCM
    
    SccProjectName0 = Perforce\u0020Project
    SccProvider0 = MSSCCI:Perforce\u0020SCM