获取 "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
但是,我没有自动获取所有更改列表的列表的方法:
- 存在于
mainline
...
- 但还没有merged/integrated进入
beta
...
- 并且不是
dummy_user
的作者。
我怎样才能做到这一点?
听起来您已经找到适合您的解决方案,但 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
背景
我在 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
但是,我没有自动获取所有更改列表的列表的方法:
- 存在于
mainline
... - 但还没有merged/integrated进入
beta
... - 并且不是
dummy_user
的作者。
我怎样才能做到这一点?
听起来您已经找到适合您的解决方案,但 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