代码之家  ›  专栏  ›  技术社区  ›  Cloud

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

  •  1
  • Cloud  · 技术社区  · 8 年前

    出身背景

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

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

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

    问题

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

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


    问题

    有没有办法 p4整数 一组更改列表 分支中尚未出现(但在主/另一分支中)

    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\u用户 .

    我怎样才能做到这一点?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Samwise    8 年前

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

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

    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