Perforce 性能:提交的文件没有';与工作区版本不匹配

Perforce 性能:提交的文件没有';与工作区版本不匹配,perforce,perforce-integrate,Perforce,Perforce Integrate,在p4 integrate 场景 Repo包含C代码和构建的DLL。我希望将变更集从一个分支集成到另一个分支 因此,我正在遵循我刚才的步骤 .cs文件没有抱怨。如果DLL中存在解决冲突,我会毫不在意地选择Accept Source或Accept Target。原因是,我总是在提交前重建DLL 问题 在本地工作区中构建并反映在变更集中的DLL是正确的。我在本地测试了它,并提交了p4。但令我惊讶的是,提交的DLL并不是我构建的。相反,来自另一个分支的一个被提交 混乱 我认为使用perforce,当在

p4 integrate

场景

Repo包含
C
代码和构建的
DLL
。我希望将变更集从一个分支集成到另一个分支 因此,我正在遵循我刚才的步骤

.cs
文件没有抱怨。如果
DLL
中存在解决冲突,我会毫不在意地选择
Accept Source
Accept Target
。原因是,我总是在提交前重建
DLL

问题

在本地工作区中构建并反映在变更集中的
DLL
是正确的。我在本地测试了它,并提交了
p4
。但令我惊讶的是,提交的
DLL
并不是我构建的。相反,来自另一个分支的一个被提交

混乱

我认为使用
perforce
,当在变更集中打开文件时,总是会提交最新的(本地)副本。这就是为什么如果
DLL

对不对

为什么提交的文件与我的工作区版本不同?

当您“接受源”时,您正在记录您希望目标文件是源文件的精确副本;因此,如果您提交文件,它甚至不会从工作区传输(为了节省时间)——而是复制到服务器端。如果您篡改了工作区文件,这将导致您描述的工作区现在与仓库不一致的情况,就像您修改了一个未打开进行编辑的文件一样

如果您使用
-t
标志(用于“篡改检查”)提交,它将根据您选择的解决选项,通过比较工作区中的内容与工作区中应该存在的内容来检查篡改文件:

C:\Perforce\test\integ>p4 integ source target
//depot/integ/target#2 - integrate from //depot/integ/source#3

C:\Perforce\test\integ>p4 resolve -at
c:\Perforce\test\integ\target - vs //depot/integ/source#3
//Samwise-dvcs-1509687817/integ/target - copy from //depot/integ/source

C:\Perforce\test\integ>echo tampertampertamper >> target

C:\Perforce\test\integ>p4 submit -t -d "submitting tampered file"
Submitting change 190.
Locking 1 files ...
integrate //depot/integ/target#3
//Samwise-dvcs-1509687817/integ/target tampered with after resolve - edit or revert.
Submit aborted -- fix problems then use 'p4 submit -c 190'.
Some file(s) could not be transferred from client.
如果您
p4编辑
该文件,它将从纯
复制
更改为
编辑
,并将从工作区而不是从源文件读取:

C:\Perforce\test\integ>p4 edit target
//depot/integ/target#2 - reopened for edit

C:\Perforce\test\integ>p4 submit -c 190
Submitting change 190.
edit //depot/integ/target#3
Change 190 submitted.

谢谢你的解释。这是否意味着我的工作流程显示在集成/解析后编辑文件,因为我将进行重建?而且这两个
接受他们/你的
都不起作用。我确实从命令行中观察到了篡改错误。但从未从P4V GUI中观察到该错误。“篡改检查”链接说它一直处于打开状态,不能被禁用,所以本地工作区中更改的文件应该会引发错误?我在
提交
中找不到
-t
标志。我正在Windows上使用Performance是的,如果您想进行本地更改,您应该打开以进行编辑(我认为在P4V中“签出”)。或者,完全从合并操作中排除此文件(在流规范中将其设置为“隔离”,或从分支视图中删除),因为它不是您实际合并/复制的文件。关于
-t
选项?我在
p4 submit
中找不到任何这样的选项,请参见
p4 help undoc
——这不是一个标准选项,因为如果submit必须检查每个文件以确保您没有修改它,它会减慢大型分支/复制操作。通常只有
merge
d文件被篡改检查(这是一种不太常见的情况,因为它会弄乱仓库中的实际历史记录,而不仅仅是让一个工作区处于不一致的状态),因此弄乱它们的成本更高)。默认情况下,我共享的Performce社区链接显示了与integrate的篡改检查。可能是
P4V
GUI没有这样做。我会检查的。谢谢