问题标签 [perforce]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
version-control - 处理源控制系统中的多个变更集
我在源代码管理中出现了一个相当罕见的问题。在此处的示例中,Perforce 出现了问题,但我怀疑许多 SCM 也会出现同样的问题,尤其是分布式 SCM。
Perforce 支持更改列表(或更改集,如果您愿意)。变更列表支持两种常见用法:
当您提交更改列表时,提交是原子的,因此所有文件都已提交或没有。这是大多数人在提到变更列表时谈论的标题功能。
Perforce 支持多个更改列表。基本上,当您签出一个文件时,您会告诉它它属于哪个更改列表。因此,如果您正在开发花哨的新电子邮件功能,这将需要数月的工作并赚取数百万美元,并且技术支持人员向您提出必须在昨天修复的错误,您不必从整个项目的一个新分支。您可以将有缺陷的文件签出到新的更改列表中,修复问题,签入新的更改列表,然后回到新电子邮件功能的实际工作中,就好像什么都没发生一样。
在大多数情况下,一切都很好。但是,当您实现电子邮件功能时,您会在所有地方进行无数次更改,尤其是在 main.h 中,而碰巧的是,当您开始修复错误时,您会发现必须进行的微小更改也在main.h中。新功能的更改列表已经签出了 main.h,因此您不能轻易将其放入更改列表中以进行错误修复。
现在你做什么?你有几个选择:
创建一个新的客户端规范。Perforce 中的 clientspec 是 depot 中的文件/目录列表以及要复制所有内容的本地目的地。因此,您可以创建项目的第二个副本,而无需对电子邮件功能进行任何更改。
做一个软糖。备份您修改后的 main.h 副本并恢复此文件。然后,您可以自由地将 main.h 检出到错误修复更改列表中。您修复错误,签入错误修复更改列表,然后将 main.h 签入电子邮件功能更改列表。最后,您从一开始所做的备份中合并所有更改。
您确定您对 main.h 所做的所有更改都没有副作用或依赖性,因此您只需将 main.h 移到错误修复更改列表中,进行更改并将其签入。然后您再次将其签出到电子邮件功能中更改列表。显然,这种方法有两个问题:首先,实际上可能存在您没有考虑过的副作用,其次您已经破坏了您的版本历史。
选项 1 可能是最干净的,但并不总是实用的。我正在处理的一个项目有数百万行代码和一个非常复杂的构建过程。设置一个新环境需要一天的时间,所以 5 分钟的 bug 修复是不切实际的。
选项 3 是一个糟糕的选项,但它是最快的,所以它可能非常诱人。
这留下了选项 2,这是我通常会使用的选项。
有人有更好的解决方案吗?
对于这个冗长的问题,我深表歉意,但我在 StackOverflow 上发现,经过深思熟虑的问题可以得到更好的答案。
visual-studio - Perforce 与 Visual Studio 的集成,无需将项目文件签入到 perforce
我正在研究一个大型源代码库(大约 15K 文件),分解为大约 25 个项目。我想将源代码保留在 perforce 中(并为此评估 perforce),但由于设置的复杂性,我无法将 Visual Studio 项目保留在源代码控制中,我理论上知道这个问题的答案是签入项目,但这是不可行的(我们最终会签入多个 VS 版本的项目,以及每个版本的多个变体,而是自动生成,并且此设置运行良好)。
有没有办法让 VS 在不将项目添加到 perforce 的情况下检查文件以进行编辑,以避免用户不得不去 perforce 客户端并手动检查每个文件以进行编辑?或者(甚至更好)有没有办法让 VS 识别项目中的文件受源代码控制,而不必将项目也添加到源代码控制?
我知道我们也可以采取策略让每个用户提前检查他们可能想要编辑的所有文件,然后在提交更改之前恢复未修改的文件,采用这种方法是否会降低性能?
version-control - Perforce,多个解决方案之间共享的项目
更新:
所以事实证明,我们可能在 Visual Studio 2003 中发现了一个错误(我知道……这并不奇怪)。我们发现,如果使用 Visual Studio(使用将解决方案添加到源代码管理)将解决方案添加到存储库中,一切都很好......去图吧。
因此,我们正在将我们的 VSS 存储库(如果可以调用它的话)转换为 Perforce,并且我们遇到了多个解决方案中包含的项目的问题。
我们的存储库可能看起来像这样......
- //仓库
- 开发主程序
- 解决方案1
- Project1(构建到 DLL)
- 解决方案 2(以 Project1 作为项目参考)
- 项目2
- 解决方案 3(以 Project1 作为项目参考)
- 项目3
- 解决方案1
- 开发主程序
在 Visual Studio for Solution2 中使用集成的源代码管理时,它抱怨项目不在当前解决方案文件夹下,我们可能想要移动它。因为多个解决方案引用了项目 1,我们永远无法将它组织到一个解决方案不会抱怨的地方......
将 Project1 构建为 DLL 并将其存储在 Lib 文件夹中的最佳做法是什么?或者,还有更好的方法?
谢谢。
visual-studio - Perforce 和 SourceSafe 可以在 Visual Studio 中共存吗?
更具体地说,Visual Studio 2008。我们正在测试迁移到 Perforce 以进行源代码控制,所以我想安装 P4SCC 插件来玩转。但是,我还想继续为尚未迁移的项目使用 SourceSafe 的 IDE 功能。两者能否和平共存,或者对于特定的 VS 安装,两者是其中之一?
version-control - 所有更改注释以在 2 个标签之间执行分支?(包括合并)
我们的 perforce 管理员限制了“最大行”扫描,因此我运行以下命令的第一个想法将不起作用:
- 所有更改,包括在特定标签时间 1 集成到分支中
- 所有更改,包括在特定的早期标签时间集成到分支中 2
- 从时间 1 中减去时间 2 更改以获得带有注释的新更改。
是否有另一种方法可以在没有如此庞大的查询的情况下获得相同的结果(当 perforce 包含 7 年的历史并且 -i 触发扫描回到历史的曙光时)
根据 Gregs 的评论添加了这条评论:
基本上,重点是查看在 2 个标签(或更常见的是一些旧标签和今天)之间的特定发布分支中修复了哪些错误。我希望简化(加速)我们目前拥有的过于复杂的脚本,它查看进入发布分支的更改,它遵循进入它们的文件至少 2 个分支,以便打印出原始更改中的所有变更集注释(临时合并评论往往只是说诸如 merge123 之类的东西,而不是描述实际的更改评论,所以我们也需要沿着树走到原始评论),脚本最终输出如下内容(我们放置质量中心 ID进入变更集评论):
- qualityCenterId123 - 修复了一些错误
- 在 gui qcId124 中 - 修复了其他一些
- 错误 qcId125 - 修复了一些其他错误
- 合并123
根据评论更新:
Toby 的方法的问题是代码分支的大部分更改都是通过集成来实现的,-i 将包括这些更改,但正如所述,由于 perforce 服务器上的负载,我们的管理员不允许查询的程度会爆炸跑步。所以这就是为什么我正在寻找一种替代方法来获得相同的结果。
perforce - 编写一个支持代码覆盖测试的工具
我正在尝试编写一个小工具来支持我们在公司运行的一些代码覆盖率测试。
这是我对工具的要求 -
输入- 已修改的文件列表(.cpp 和 .h)(作为签入更改列表的一部分)
输出- 在源中添加或修改的所有功能(作为签入更改的结果)。
知道我该怎么做吗?基本上,它归结为更改了哪些行以及与更改的行相关的功能是什么......
更多信息 - 源代码控制:Perforce 平台:Windows
svn - 如何防止颠覆用户访问存储库的一部分?
我正在为一个项目使用托管在 Dreamhost 上的 Subversion 存储库。
我想在受限的基础上允许访问某些用户。至少我想允许一些用户只读访问,但理想情况下我想阻止一些用户看到存储库的某些部分。尽管我认为它存在,但我找不到 Subversion 的网络文档中提到的用户权限?
我习惯使用 Perforce,所以我想要的是p4 protect
对 Perforce 有什么作用。
谢谢。
xcode - 如何使用 Xcode 中的 p4merge?
我想在 SVN 设置中使用 Xcode 中的 p4merge 工具。自找麻烦?
version-control - Perforce - 每次签到时都会收到电子邮件
有没有办法让 Perforce 在每张支票上向您发送一封电子邮件到特定的存管处?
version-control - 我可以集成不在我的客户规范中的文件吗?
有没有办法整合不在您的客户规范中的文件?
具体来说,我们有一个目录,其中包含我在本地构建的大量静态库(所以我不需要它们脱离源代码控制),并且不希望仅仅为了做一个整合。
在分支规范中:
//project1/project/lib/... //project2/project/external/project1/lib/...
在我的客户规范中:
-//project1/project/lib/... //cleintspec/project1/project/lib/...