Perforce:如何将稍后的提交应用于同步到早期版本的工作区?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

这很全面。谢谢!可悲的是,工作空间很大,因此分支将花费太多时间。否则我不会寻找自动化解决方案。

以上是关于Perforce:如何将稍后的提交应用于同步到早期版本的工作区?的主要内容,如果未能解决你的问题,请参考以下文章

确定用于在 perforce 中提交新更改的更改列表

Perforce ( P4 ) 将树中的特定版本移动到树的顶部

使用 p4 zip 和 unzip 将文件从一台 perforce 服务器导出到另一台

Perforce中时间点的表示是啥

如何将更改从主分支中的待处理更改列表迁移到 perforce 中的另一个分支

Perforce:同步主数据但也直接下载派生数据