【问题标题】:Perforce: The submitted file doesn't match workspace versionPerforce:提交的文件与工作区版本不匹配
【发布时间】:2020-08-10 19:12:04
【问题描述】:

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

场景

Repo 包含C# 代码和内置的DLL。我希望将一个变更集从一个分支集成到另一个分支 所以我正在按照我刚才discussed 的步骤进行操作

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

问题

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

混乱

我认为使用perforce,当在变更集中打开文件时,总是会提交最新的(本地)副本。所以DLL有冲突我就不怎么关注了

这不正确吗?

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

【问题讨论】:

    标签: perforce perforce-integrate


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解释。这是否意味着我的工作流程显示在集成/解析后编辑文件,因为我将进行重建?而且Accept theirs/yours 都不起作用。我确实从命令行观察到篡改错误。但从未从 P4V GUI 中观察到该错误。 'Tamper Checking' community.perforce.com/s/article/1027 链接说它总是打开并且不能被禁用,所以本地工作区中的更改文件应该引发错误?我在submit 中找不到-t 标志。我在 Windows 上使用 perforce
    • 是的,如果您想进行本地更改,您应该打开进行编辑(我认为在 P4V 中“签出”?)。或者,将此文件完全从合并操作中排除(在流规范中将其设置为“隔离”,或将其从分支视图中删除),因为它不是您实际合并/复制的内容。
    • 关于-t 选项?我在 p4 submit 中找不到任何此类选项
    • p4 help undoc——这不是一个标准选项,因为如果提交必须检查每个文件以确保您没有修改它,它会减慢大型分支/复制操作。通常只有merged 文件被篡改检查(它们是一种不太常见的情况,而且弄乱它们的成本更高,因为它弄乱了仓库中的实际历史记录,而不是仅仅让一个工作空间处于不一致的状态)。
    • 我分享的 perforce 社区链接显示默认使用集成进行篡改检查。也许P4V GUI 没有这样做。会检查。谢谢
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2021-02-22
    • 2012-04-01
    • 2021-05-08
    相关资源
    最近更新 更多