列出perforce在一个分支中的变化,而不是另一个分支;当有删除时

时间:2014-02-28 11:35:30

标签: merge perforce

当我想计算一个分支但不是旧分支的变更列表时,我会做之类的

diff -u \
  <( p4 changes -s submitted -i @OLD_BRANCH_LABEL )  \
  <( p4 changes -s submitted -i @NEW_BRANCH_LABEL ) | grep ^+'

注意:这些是包含视图和修订的自动标签,但我也可以放入视图路径@REVISION

当两个标签实际上在同一个视图中时,它给出了一个很好的答案,并且一般都有很好的答案。

但我发现在这种情况下我得到了一些糟糕的结果:

如果提交#A将文件添加到MAIN_BRANCH,并且提交#D删除文件(并进行其他更改),然后提交#F,它会分配NEW_BRANCH,我发现MAIN_BRANCH包含两个提交#A和#D,但NEW_BRANCH包含提交#D和#F

NEW_BRANCH不包含提交#A

所以我的p4更改上面的配方坚持主线包含#A,它不在分支中,或者换句话说是从分支开始,即使它不在主线中而不是在分支中。

一个明显但不实用的修复方法是在我想要比较的点上另一个MAIN_BRANCH分支,知道#A将以同样的方式再次被排除。

如果这是git,我会使用git-merge-base或其他东西找到一个共同点并从两个分支的更改中删除它,但perforce分支太灵活,只是另一个集成。

有什么方法可以说服NEW_BRANCH确实包含#A? (对于分支叉#F在#A提交后发生)。

或者让perforce忽略其文件被完全删除的更改,如果创建了分支,那么会被忽略吗?

1 个答案:

答案 0 :(得分:1)

如果我正确地阅读了您的问题,命令p4交换完全符合您的要求。

'p4 interchanges' lists changes that have not been integrated from
a set of source files to a set of target files.

有关完整说明,请查看p4帮助交换。该命令也考虑了间接集成。