Perforce:提交的文件与工作区版本不匹配

Perforce: The submitted file doesn't match workspace version

我在 perforce 提交的文件中遇到了一个奇怪的行为,在 p4 integrate

之后

场景

Repo 包含 C# 代码和内置的 DLL。我希望将变更集从一个分支集成到另一个分支 所以我正在按照 前一段时间

的步骤进行操作

.cs 文件没有抱怨。如果 DLL 中存在解决冲突,我会选择 Accept SourceAccept Target 中的任何一个,而不用太在意。原因是,我总是在提交

之前重建 DLL

问题

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

迷茫

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

中报告有冲突,我不会太在意

这不对吗?

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

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

如果您使用 -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 edit 文件,它会从纯 copy 更改为 edit,并且将从工作区而不是源文件中读取:

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.