Wee*_*ble 71 version-control perforce visual-studio
我们正在使用Perforce和Visual Studio.每当我们创建一个分支时,除非我们使用"从源代码管理中打开",否则某些项目不会被绑定到源代码控制,但其他项目无论如何都可以工作.从我的调查中,我知道一些涉及的事情:
在我们的.csproj文件中,有以下设置:
有时它们都被设置为"SAK",有时不是.如果这些说"SAK",事情似乎更有可能奏效.
在我们的.sln文件中,有许多项目的设置:
(#是标识每个项目的数字.)SccLocalPath是相对于解决方案文件的路径.通常它是".",有时它是项目所在的文件夹,有时它是".."或"..\..",它似乎不好指向上面的文件夹解决方案文件 相对化的是从该文件夹到项目文件的路径.如果SccLocalPath指向项目的文件夹,它将完全丢失.如果SccLocalPath中包含"..",则此路径可能包含分支之间不同的文件夹名称,我认为这会导致问题.
所以,最后要了解我想知道的细节:
2012年6月添加: 我不再使用Perforce了,所以我不能保证它,但请看下面的KCD答案.显然有一个新的P4 VS插件正在开发中.希望它能清除所有这些混乱!
Mil*_*ian 102
我不同意Perforce在Visual Studio中的集成是"非常糟糕"的说法.相反,我将其定义为"开箱即用的体验不是最佳":-).以下部分讨论了我对项目/解决方案设置的集成和建议的理解.
如果您对源代码控制集成的工作方式不感兴趣,可以跳到本答案的末尾,总结Weeble问题的答案.
免责声明:以下部分是基于我的实证经验的有根据的猜测,但是我在许多项目中使用了多年的技术(每个项目都有多个实验/主干/维护/发布分支,有时甚至是多个解决方案文件,没有问题).缺点是您必须手动更新项目文件 - 但是2分钟的投资在项目的生命周期内分摊得非常好恕我:-).
在初始解决方案加载期间,Visual Studio使用解决方案文件和每个项目文件中的源代码控制绑定信息.然后将此绑定信息存储在name.suo文件中(假设我们使用name.sln作为解决方案) - 请注意,suo文件标有隐藏标志,因此它们在文件浏览器中不可见(除非您覆盖"隐藏"文件和文件夹"选项".
如果出现任何问题,重新绑定到源控件提供程序的最简单方法是删除相应的suo文件并重新打开解决方案.创建suo文件后,对<Scc*>元素的更改不起作用.
如果在初始解决方案打开期间,解决方案文件中存储的绑定信息与项目文件中存储的信息之间存在差异,Visual Studio将尝试解决此问题(有时甚至会提示您决定选择解决方案中的信息还是项目中的信息应作为"主人"来解决差异):

为什么Visual Studio违反DRY(不要重复自己)原则?我不知道.我认为这有历史原因,并且与那个叫做Visual Source Safe的噩梦的需求紧密相连:-).
在向Perforce添加新的或现有的解决方案/项目时,我总是首先创建一个空白解决方案(请参阅"源控制空白解决方案"部分).然后我一个接一个地将项目添加到这个空白解决方案中.根据添加的项目是否已经存在,步骤略有不同(请参阅"源控制现有(未绑定)项目"和"源控制现有(绑定)项目"部分)或者我需要创建一个新项目(请参阅"源头控制新项目"部分).
要向源控件添加新的空白解决方案,请执行以下操作:
在你最喜欢的编辑器中打开name.sln文件(记事本,如果你真的很绝望:-))并添加两个新行(SccProjectName0和SccProvider0) - 空白解决方案文件现在应该有一个源控件部分,如下所示:
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 1
SccLocalPath0 = .
SccProjectName0 = Tutorial
SccProvider0 = MSSCCI:Perforce\u0020SCM
EndGlobalSection
Run Code Online (Sandbox Code Playgroud)
值应选择如下:
您现在可以测试绑定:

注意:"服务器绑定"列显示我们为"SccProjectName0"选择的值.如果您要创建一个全新的项目并希望立即开始在Perforce软件仓库中跟踪它,请按照下列步骤操作:
使用您选择的编辑器手动编辑您刚刚创建的项目文件(来吧,记事本再次?;-)).将以下属性元素添加到PropertyGroup(任何属性组)中:
<PropertyGroup>
...
<SccProjectName>Tutorial</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccProvider>MSSCCI:Perforce SCM</SccProvider>
...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
值应选择如下:
切换回Visual Studio; 它应该自动检测项目文件是否已在外部更新并提供重新加载(如果没有,手动卸载并重新加载项目)
要验证新添加的项目是否正确绑定,您可以按照以下步骤操作:

您现在可以使用"文件" - >"源代码管理" - >"更改源代码管理..."来验证解决方案的源代码管理状态:

有关此状态屏幕截图的一点需要注意的是,当我选择解决方案行时,所有剩余的行也被"选中"(蓝色突出显示).这是因为所有这些条目具有相同的"服务器绑定"+"本地绑定",因此共享相同的源控制提供者(P4)连接.
另请注意,两个项目的"相对路径"有两个级别,并且相对于相同的"本地绑定" - 解决方案文件所在的目录.
如果您的现有项目尚未在任何其他Perforce解决方案中使用,请按照以下步骤将它们添加到Perforce(即导入之前未受源控制的项目(Internet下载等)或使用不同的源控件提供者(Visual Source Safe等).
验证步骤与"源控制新项目"部分完全相同.
如果您有使用此处讨论的技术绑定到Perforce的项目,并且您希望在不同的解决方案(新分支,重用项目的替代解决方案等)中使用它们,请使用以下步骤:
我还包括你原来问题的答案:
当您执行"更改源代码管理"并绑定项目时会发生什么?Visual Studio如何决定将什么放入项目和解决方案文件中?
这会更新您重新绑定的项目文件中的"Scc*"元素; 然后更新解决方案文件,以便它与项目文件绑定同步
当您执行"从源代码管理中打开"时会发生什么?
允许您选择要打开的解决方案.之后,解决方案中包含的所有项目将自动同步到头部.我发现这个功能在Perforce世界中并不是很有用,你必须创建一个客户端,你可能会从P4V/P4Win/P4同步这个客户端而不是依赖Visual Studio.这在Visual Source Safe世界中非常有用,在这个世界中没有视图概念,而且您定义了存储库在结帐时间的位置.
SccLocalPath和SccProjectFilePathRelativizedFromConnection引用的这个"连接"文件夹是什么?Visual Studio/Perforce如何选择它?
这是Visual Studio的簿记.它是根据每个项目文件中的绑定确定的(我猜在理论上如果项目文件由于某种原因丢失了绑定信息,它可以从解决方案信息重建...)
是否有一些推荐的方法使源控件绑定继续工作,即使您创建解决方案的新分支?
我希望上面的部分能让你了解一种对我来说非常好的方法:-).
Tim*_*mbo 22
米兰的帖子经过精心研究和写得很好,但它的长度超出了人们对P4SCC模型被打破的疑虑.在项目和解决方案文件中存储源代码控制绑定信息是荒谬的.强制执行(通过sccprojectname)项目只是一个解决方案的一部分同样荒谬.
此外,P4SCC在大型解决方案中具有巨大的性能成本,因为它在启动时从每个文件的源代码控制中检索信息,并在整个开发会话期间在内存中维护该状态.它以无信息.vsscc和vssscc文件的形式创建了额外的内容,以支持Perforce不使用的某些SCC功能(AFAICT).
理想的Perforce集成如下所示:
我们完全摆脱了P4SCC及其奇怪的要求和负担.相反,我们使用NiftyPerforce.有一些错误,但我们发现解决这些错误比解决Perforce < - > VSSCC模型中的设计缺陷更不令人沮丧.
为了保持这一点 - P4VS插件已在2012年左右重写
现在,您可以直接从IDE自然地执行与Perforce的所有日常交互,例如检入代码和查看文件历史记录.
如果你是一个寻求更多功能的超级用户,P4VS不会让人失望.P4VS与Perforce Streams完全兼容,可以从IDE访问Stream Graph以及Time-lapse View和Revision Graph.如果您负责分支管理,您也可以从P4VS合并.
而且,如果您远程工作或想要进行一些私人分支,可以通过P4VS配置P4Sandbox.
通过使用P4CONFIG环境变量可以简化使用Perforce和Visual Studio.
基本上你进入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
Run Code Online (Sandbox Code Playgroud)
如果您使用的是P4CONFIG方法,所有单个项目都可以使用默认的"SAK绑定".解决这个问题应该允许Perforce完美地从一个干净的同步工作,并且还消除每个项目目录中MSSCCPRJ.SCC cruft的生成.
| 归档时间: |
|
| 查看次数: |
54650 次 |
| 最近记录: |