【问题标题】:Perforce can't resolve moved filesPerforce 无法解析移动的文件
【发布时间】:2019-06-22 01:08:08
【问题描述】:

我正在尝试将一个分支与多个已移动的文件集成。它们未在目标分支中修改,但显示为冲突。单击“接受源”文件时,文件会从冲突对话框中静默消失,但仍会在更改列表中标记为冲突。我可以解决此问题的一种方法是添加 -Di 标志,但这对我的团队来说是一个很大的禁忌。我还通过命令行尝试了 p4 解析,结果相同(没有错误或任何东西,但没有任何问题得到解决)。

发生了什么?如何解决保留移动历史记录?

【问题讨论】:

    标签: perforce


    【解决方案1】:

    做:

    p4 resolve -as
    

    从命令行。在绝大多数情况下,这就是您需要做的一切;它告诉 resolve 接受相对于基础的更改(这意味着在目标未更改的情况下接受源)。

    (更新以包含评论中的其他信息)

    如果在你这样做之后你得到一个错误,比如:

    不能移动(打开删除);必须接受其他解决方案或忽略

    这意味着文件已在源中移动(这意味着通常resolve -as 会移动工作区文件以匹配它),但无法移动工作区中的文件,因为它已经打开以供删除(您不能移动已删除的文件)。如果您移动一个文件,删除它,然后尝试独立解决这两个操作(但没有在两者之间提交),这种情况非常罕见。在这种情况下,您可能希望通过执行以下操作专门“忽略”移动解析(如错误消息所示):

    p4 resolve -ay
    

    如果您以某种方式使您的工作文件进入了错误状态(也许您在设置集成之前运行了随机命令并且工作区未处于干净状态)并且无法弄清楚您是如何到达这里的或者对取证没有兴趣,当你只想做一个基本的整合而忘记你之前在做的事情时,你总是可以像这样重新开始:

    p4 revert FILE
    p4 integrate -b BRANCH FILE
    p4 resolve -as
    

    【讨论】:

    • 它说“不能移动(打开删除);必须接受其他解析或忽略”
    • 啊!做p4 resolve -ay 忽略这一举动。就像错误所说的那样,您无法移动已删除的文件,因此您必须执行取消删除文件的操作(例如分支解析),或者您必须忽略移动才能接受删除.我假设发生的事情是文件在源分支中被移动和删除;在这种情况下,正确的最终状态将是已删除的文件(如果文件不再存在,则移动无关紧要,因此忽略移动是正确的选择,而不是忽略删除以接受移动)。
    • 正确的操作是实际移动,我不知道最初发生了什么以及为什么会出现此错误(这不是我的分支),但文件存在于源分支中。做 -ay 只是删除它们
    • 您可以运行p4 resolved 来了解它正在接受哪些源更改以及它们来自何处。或者恢复文件并重做集成,这一次查看来自p4 resolve 的所有输出以查看正在应用的更改序列(如果您从命令行执行此操作,您将获得 P4V 吃掉的所有信息)。也许文件根本没有从源中删除,您在尝试集成移动之前将其打开以手动删除?
    【解决方案2】:

    发生了什么

    Perforce 无法正确处理合并/集成中移动的文件。我可以确认这在最新版本中仍然是一个问题。我们经常有这种情况。

    假设,团队 A 正在开发 //OurDepot/ExclusiveContentOfTeamA/,然后您将其合并到团队 B 的分支。考虑 B 队没有接触(甚至没有看过)那个位置的情况。

    在这种情况下合并应该轻而易举,对吧?错了!

    如果团队 A 移动并删除了文件,那么无论合并是否有效,这始终是一个掷骰子的结果。大多数情况下,“接受来源”会解决问题,但有时您会得到问题中描述的状态。

    我该如何解决保留移动历史记录?

    你不能。您所能做的只是一些 hacky 解决方案,强制 perforce 删除文件(p4 resolve -ay),然后通过将文件重新添加为新文件来手动修复分支中的状态。历史将会消失。

    【讨论】:

    • 如前所述,这种方法将失去历史。您通常也不想盲目地“接受来源”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多