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

Merge 获取“之间的所有变更列表(不包括用户)”;主线;和分支 背景,merge,perforce,perforce-integrate,Merge,Perforce,Perforce Integrate,我在Perforce有一个“主线”仓库和一个“beta”分支(使用简单分支:无流等) 我想把最新的代码从“主线”合并到我的“测试版”分支。我每天大约要做一次,每天大约有100多个提交/提交到“主线分支” 通常,我会这样做: p4 integ //prod/mainline/... //prod/beta/... cd $(p4 where //prod/beta/... | cut -d ' ' -f3 | sed 's/\.\.\.$//g') p4 resolve ./... 问题 然而

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

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

通常,我会这样做:

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

问题 然而,我们有一个恼人的每小时构建过程,它更新各种makefile、构建脚本等中的版本号;更新版本/分支编号,并由我们的构建服务器使用“虚拟”帐户(即
dummy\u user
)检入Performance这是跨所有分支执行的,导致任何合并操作都有任意冲突

此版本号提交现在阻止我的
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
但是,我没有一种自动获取所有变更列表的方法:

  • 存在于
    主线中
  • 但尚未合并/集成到
    beta
  • 并且不是由
    dummy\u user
    编写的

我怎样才能做到这一点呢?

听起来你已经找到了一个适合你的解决方案,但是FWIW下面是我要做的:

0)制作BranchSec,因为这使下一部分更容易:

p4 --field "View=//prod/mainline/... //prod/beta/..." branch -o prod-main-beta | p4 branch -i
1) 忽略机器人提交(我假设您只想不处理这些事情):

2) 做“真实”的整合。如果您发现自己仍然需要选择“虚拟”更改,请尝试
-Rs
选项——这可能会给您提供更多的合并操作,但它会向后倾斜,以确保这些合并不包括您已经集成的任何内容

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

可选3)改进构建工具,使版本信息位于专用文件中,其他构建文件链接到该文件。然后,您可以从分支规范中排除您的版本文件,或者总是忽略对其所做的更改,而无需仔细挑选,或者其他任何操作。这里有一个真实的例子:

接受,因为您的选项“更规范”(更多的P4,更少的外部脚本)。请注意,如果我想在路上重复使用BranchSec,我会采取哪些步骤?谢谢没有额外的步骤,这就是BranchSec的美丽之处。创建一次,使用多次。:)
p4 integ -b prod-main-beta [-Rs]
p4 resolve [-am]
p4 submit