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

问题描述

var g_a = 1; //create with var,g_a is a variable delete g_a; //return false console.log(g_a); //g_a is still 1之后,我在perforce个提交的文件中遇到了奇怪的行为

场景

回购包含p4 integrate代码和内置的C#。我希望将一个变更集从一个分支整合到另一个分支 所以我要按照前一段时间discussed进行的操作

DLL文件没有抱怨。如果.cs中存在解决冲突,那么我会选择DLLAccept Source中的任何一个而不必太在意。原因是,我总是在提交之前重建Accept Target

问题

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

困惑

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

中报告了冲突时我不太关注的原因

不是吗?

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

解决方法

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

如果您使用-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.