我们正在使用 Perforce 和 Visual Studio。每当我们创建一个分支时,除非我们使用“从源代码管理打开”,否则某些项目将不会被绑定(bind)到源代码管理,但其他项目无论如何都可以工作。通过我的调查,我知道其中涉及的一些事情:
在我们的 .csproj 文件中,有以下设置:
有时它们都设置为“SAK”,有时则不是。如果这些说“SAK”,事情似乎更有可能奏效。
在我们的 .sln 文件中,有许多项目的设置:
(# 是标识每个项目的数字。) SccLocalPath 是相对于解决方案文件的路径。经常是“.”,有时是项目所在的文件夹,有时是“..”或“..\..”,指向上面的文件夹好像不好解决方案文件夹。相对化的是从该文件夹到项目文件的路径。如果 SccLocalPath 指向项目的文件夹,它将完全丢失。如果 SccLocalPath 中有“..”,则此路径可能包含分支之间不相同的文件夹名称,我认为这会导致问题。
所以,为了最终了解我想知道的细节:
2012 年 6 月添加:
我不再使用 Perforce,所以我不能保证它,但看看下面的 KCD's answer。显然有 a new P4 VS plugin 正在开发中。希望它应该清除所有这些困惑!
最佳答案
介绍 What happens when you do "Change source control" and bind projects? How does Visual Studio decide what to put in the project and solution files? What happens when you do "Open from source control"? What's this "connection" folder that SccLocalPath and SccProjectFilePathRelativizedFromConnection refer to? How does Visual Studio/Perforce pick it? Is there some recommended way to make the source control bindings continue to work even when you create a new branch of the solution?
我不同意 Visual Studio 中的 Perforce 集成“可怕”的说法。相反,我将其定义为“开箱即用的体验不是最佳的”:-)。以下部分讨论了我对项目/解决方案设置的集成和建议的理解。
如果您对源代码控制集成如何工作的细节不感兴趣,可以跳到本答案的末尾,我总结了 Weeble 问题的答案。
免责声明:以下部分只是基于我的经验经验的有根据的猜测,但是我已经在许多项目中使用该技术多年(每个项目都有多个实验/主干/维护/发布分支,有时甚至多个解决方案文件,没有问题)。缺点是您必须手动更新项目文件 - 但 2 分钟的投资在项目的整个生命周期内很好地摊销,恕我直言:-)。
解决方案与项目
Visual Studio 在初始解决方案加载期间使用来自解决方案文件和每个项目文件的源代码管理绑定(bind)信息。然后,这个绑定(bind)信息存储在 name.suo 文件(假设我们使用 name.sln 作为解决方案) - 注意锁文件都标有隐藏标志,以便它们不会在文件中看到资源管理器(除非您覆盖“隐藏文件和文件夹”选项)。
如果出现任何问题,重新绑定(bind)到源代码控制提供程序的最简单方法是删除相应的 suo 文件并重新打开解决方案。创建 suo 文件后,对
如果在初始解决方案打开期间,存储在解决方案文件中的绑定(bind)信息与存储在项目文件中的信息之间存在差异,Visual Studio 将尝试修复此问题(有时它甚至会提示您决定选择解决方案中的信息还是项目文件中的信息)项目中的信息应作为解决差异的“主”):
为什么 Visual Studio 违反了 DRY(不要重复自己)原则?我不知道。我认为这有历史原因,并且与称为 Visual Source Safe :-) 的噩梦的需求紧密相关。
如何“正确”设置?
向 Perforce 添加新的或现有的解决方案/项目时,我 总是 从创建空白解决方案开始(请参阅“源控制空白解决方案”部分)。然后我将项目一个接一个地添加到这个空白解决方案中。根据要添加的项目是否已存在(请参阅“源代码控制现有(未绑定(bind))项目”和“源代码控制现有(绑定(bind))项目”部分)或我是否需要创建一个新项目,这些步骤略有不同(请参阅“源代码控制新项目”部分)。
对空白解决方案进行源代码控制
要将新的空白解决方案添加到源代码管理,请执行以下操作:
原因 :“ checkin ”操作将创建一个新文件“name.vssscc”,然后将“name.sln”和“name.vssscc”添加到 Perforce 的默认更改列表中;通过取消提交对话框,我们将保持“添加”操作挂起,并且能够在提交到 P4 GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 1
SccLocalPath0 = .
SccProjectName0 = Tutorial
SccProvider0 = MSSCCI:Perforce\u0020SCM
EndGlobalSection
应按如下方式选择值:
您现在可以测试绑定(bind):
注意:“服务器绑定(bind)”列显示了我们为“SccProjectName0”选择的值。
源代码控制新项目
如果您正在创建一个全新的项目并希望立即开始在 Perforce 仓库中对其进行跟踪,请按照以下步骤操作:<PropertyGroup>
...
<SccProjectName>Tutorial</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccProvider>MSSCCI:Perforce SCM</SccProvider>
...
</PropertyGroup>
应按如下方式选择值:
验证新添加的项目是否绑定(bind)正确,可以按照以下步骤操作:
关于此状态屏幕截图需要注意的一件事是,当我选择解决方案行时,所有剩余的行也都被“选中”(蓝色突出显示)。这是因为所有这些条目都具有相同的“服务器绑定(bind)”+“本地绑定(bind)”,因此共享相同的源控制提供程序 (P4) 连接。
另请注意,两个项目的“相对路径”有两个级别,并且相对于相同的“本地绑定(bind)” - 解决方案文件所在的目录。
对现有(未绑定(bind))项目进行源代码控制
如果您有尚未在任何其他 Perforce 解决方案中使用的现有项目,请按照以下步骤将它们添加到 Perforce(即导入之前没有进行源代码控制(Internet 下载等)或正在使用不同源代码控制的项目)提供程序(Visual Source Safe 等)。
验证步骤与“源代码控制新项目”部分完全相同。
源代码控制现有(绑定(bind))项目
如果您的项目已经使用此处讨论的技术绑定(bind)到 Perforce,并且您想在不同的解决方案(新分支、重用项目的替代解决方案等)中使用它们,请使用以下步骤:
概括
我还包括对您原始问题的回答:
这会更新您正在重新绑定(bind)的项目文件中的“Scc*”元素;然后解决方案文件也会更新,以便与项目文件绑定(bind)同步
允许您选择要打开的解决方案。之后,解决方案中包含的所有项目都会自动同步到 head。我发现这个功能在 Perforce 世界中不是很有用,在那里你必须创建一个客户端,而且你很可能从 P4V/P4Win/P4 同步这个客户端,而不是依赖 Visual Studio。这在没有 View 概念的 Visual Source Safe 世界中有点有用,并且您正在定义存储库在 check out 时的位置。
这是 Visual Studio 的簿记。它是根据每个项目文件中的绑定(bind)确定的(我猜理论上如果项目文件由于某种原因丢失了绑定(bind)信息,它可以从解决方案信息中重建......)
我希望以上部分能让您了解一种对我来说非常有效的方法:-)。
关于visual-studio - Visual Studio 源代码控制集成如何与 Perforce 配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261525/