获取 "mainline" 和分支之间的所有更改列表(不包括用户)

Get all changelists (excluding user) between "mainline" and branch

背景

我在 Perforce 中有一个“主线”软件仓库和一个“测试版”分支(使用简单分支:无流等)。

我想将最新的代码从“主线”合并到我的“测试版”分支。我每天大约要这样做一次,每天大约有 100+ commits/submissions 到“主线分支”。

通常情况下,我会这样做:

p4 integ //prod/mainline/... //prod/beta/...
cd $(p4 where //prod/beta/... | cut -d ' ' -f3 | sed 's/\.\.\.$//g')
p4 resolve ./...

问题

但是,我们有一个恼人的每小时一次的构建过程,它会更新各种 Makefile、构建脚本等中的版本号;更新 version/branch 数字,并由我们的构建服务器使用“虚拟”帐户(即 dummy_user)签入 Perforce。 这是在所有分支中完成的, 导致任何合并操作具有任意冲突。

此版本号提交现在阻止我的 p4 integ/p4 resolve 操作完全完成,我必须手动合并所有这些受“版本号更新操作”影响的文件。 我只想手动合并实际的代码更改,而不是这个版本号废话。


问题

有没有办法 p4 integ 一组更改列表 尚未存在于分支中(但存在于 main/another-branch 中),不包括用户?我总是可以做类似的事情:

for i in $(p4 changes //prod/mainline/... | grep -v dummy_user | cut -d ' ' -f2)
do
    p4 integ //prod/mainline/...@${i},${i} //prod/beta/...
done

但是,我没有自动获取所有更改列表的列表的方法:

我怎样才能做到这一点?

听起来您已经找到适合您的解决方案,但 FWIW 这就是我要做的:

0) 制作一个分支规范,因为这会使下一部分更容易:

p4 --field "View=//prod/mainline/... //prod/beta/..." branch -o prod-main-beta | p4 branch -i

1) 忽略 robo-commits(我假设你不想管这些事情):

p4 -Ztag -F @=%change% ichanges -u dummy_user -b prod-main-beta | p4 -x - integ -b prod-main-beta
p4 resolve -ay
p4 submit -d "Begone, robo-cruft!"

2) 进行 "real" 整合。如果您发现自己仍然不得不选择 "dummy" 更改,请尝试 -Rs 选项——这可能会让您有更多的合并要做,但它会向后弯腰以确保这些合并不包括您已经集成的任何内容。

p4 integ -b prod-main-beta [-Rs]
p4 resolve [-am]
p4 submit

可选 3) 改进您的构建工具,使版本信息位于专用文件中,其他构建文件 link 也位于其中。然后你可以从你的分支规范中排除你的版本文件,或者总是忽略对它的更改而不必挑选,或其他什么。这是一个真实的例子:https://swarm.workshop.perforce.com/files/guest/perforce_software/p4/2015-1/Version