【问题标题】:Perforce: how to apply a later commit to a workspace synced to an earlier version?Perforce:如何将稍后的提交应用于同步到早期版本的工作区?
【发布时间】:2020-09-16 17:39:12
【问题描述】:

我有一个同步到变更列表 A 的工作区。

我需要使用更改列表 D 测试版本 A,该更改列表在 A 之后提交了几次提交到同一个分支。樱桃采摘,可以这么说。

除了p4 diff -du 和应用补丁之外,我该怎么做?

【问题讨论】:

    标签: version-control perforce


    【解决方案1】:

    如果您满足于只获取 D 中的文件(在其 @D 修订版中),同时将其他所有内容同步到 A,这很简单:

    p4 sync @D,@D
    

    但是如果 D 中的某些文件也受到更改 B 和 C 的影响,这可能是不可接受的,因为 D 修订版也将包含这些更改。对于真正的挑选,您必须打开文件,以便在挑选 D 之前执行一组忽略 B 和 C 的解析。我的处理方法是:

    p4 -F "%depotFile%" files @D,@D | p4 -x - edit
    p4 -F "%depotFile%@<D" files @D,@D | p4 -x - sync
    p4 resolve -ay
    p4 sync @D,@D
    p4 resolve -am
    

    如果存在合并冲突,您需要使用交互式 p4 resolve 跟进。

    请注意,如果您实际提交这些文件,您将回滚 B 和 C(至少在这些特定文件中)。

    如果 B 和 C 不影响 D 中的文件(即 p4 files @D,@D 返回的文件),那么第 2 步和第 3 步将无操作——同步到 @&lt;D 只会将文件保留在他们当前同步的修订版(@A),并且没有什么可以解决/忽略的。然后,第 5 步的解析将自动“接受他们的”(即“从”D 复制),因为 A 和 D 之间没有“忽略”的基本修订。

    另一种可能的选择是在新分支中执行此操作(您不一定需要在任何时候提交):

    p4 integ original_branch/...@A cherry_pick/...
    p4 integ original_branch/...@D,@D cherry_pick/...
    p4 resolve -am
    

    这样做的主要缺点是,当您为分支打开它们时,它将需要同步所有文件的新副本,但如果文件不够大/数量不足以引起关注,@ 的人体工程学987654328@ 更适合这种事情,在你的工作空间内的一个单独的分支中做这样的事情会很方便,这样你就可以在不干扰任何其他正在进行的工作的情况下随意乱搞,然后丢弃整个完成后使用revert

    【讨论】:

    • 这很全面。谢谢!可悲的是,工作空间很大,因此分支将花费太多时间。否则我不会寻找自动化解决方案。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2017-10-25
    相关资源
    最近更新 更多