获取“主线”和分支之间的所有更改列表(不包括用户)

时间:2017-11-06 18:16:04

标签: merge perforce perforce-integrate

背景

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

我想将“mainline”中的最新代码合并到我的“beta”分支中。我必须每天做一次,每天大约有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撰写。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

听起来你找到了一个适合你的解决方案,但FWIW就是我要做的事情:

0)制作一个branchspec,因为这样可以使下一部分变得更容易:

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

1)忽略机器人提交(我假设你想把这些事情单独留下):

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

答案 1 :(得分:1)

在浏览其他Perforce问题时,侥幸找到了正确的问题。简而言之,我想做类似的事情:

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

现在,我终于可以在不浪费半小时手动合并机器人提交的情况下进行以下操作。

p4 resolve -am //prod/beta/...