1

背景

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

我想将最新代码从“主线”合并到我的“测试版”分支。我每天必须这样做一次,每天大约有 100 多个提交/提交到“主线分支”。

通常,我会这样做:

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

问题

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

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


问题

有没有办法获得一组尚未出现在分支中p4 integ的更改列表(但出现在主/另一个分支中) ,不包括用户?我总是可以做类似的事情:

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

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

  • 存在于mainline...
  • 但尚未合并/集成到beta...
  • 并且不是由dummy_user.

我怎样才能做到这一点?

4

1 回答 1

2

听起来您已经找到了适合您的解决方案,但 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)做“真正的”整合。如果您发现自己仍然需要选择“虚拟”更改,请尝试该-Rs选项 - 这可能会给您带来更多的合并,但它会向后弯曲以确保这些合并不包含您已经集成的任何内容。

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

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

于 2017-11-06T19:49:00.980 回答