如何获取P4操作中新生成的CL编号用于p4 shelve?
P4自动化合并场景下获取CL编号的实现方案
下面是两种可直接在脚本中落地的实现方式:
方式1:提前创建专属CL捕获编号(推荐用于自动化流程)
在执行p4 merge操作前先创建空的待处理变更列表,直接获取CL编号存入变量,后续所有操作都绑定该CL即可,bash脚本示例逻辑如下:
- 生成带描述的空CL,提取编号存入变量
# 自定义CL描述,方便后续识别变更用途 CL_DESC="自动合并冲突待排查:$(date +%Y%m%d_%H%M%S)" # 创建CL并提取纯数字编号 CL_NUM=$(p4 change -o | sed "s/<enter description here>/$CL_DESC/g" | p4 change -i | awk '{print $2}')
- 执行merge操作时指定绑定该CL
p4 merge -c $CL_NUM //depot/你的目标分支路径/...
- 后续执行
p4 resolve -am、构建测试流程,若测试失败直接调用搁置命令即可
p4 shelve -c $CL_NUM # 若需要强制覆盖同CL下已有的搁置文件,可添加-f参数:p4 shelve -f -c $CL_NUM
方式2:从默认变更列表迁移获取CL
如果你的merge操作已经执行,变更默认落在default变更列表中,可通过迁移变更的方式生成新CL并获取编号:
- 将default列表下所有打开的文件迁移到新CL,提取CL编号
CL_DESC="自动合并冲突待排查:$(date +%Y%m%d_%H%M%S)" CL_NUM=$(p4 change -o | sed "s/<enter description here>/$CL_DESC/g" | p4 change -i | awk '{print $2}') # 迁移default下所有打开的文件到新CL p4 reopen -c $CL_NUM //...
- 直接执行搁置命令即可
p4 shelve -c $CL_NUM
补充说明
p4 resolve -am后残留的冲突标记会随文件一同搁置,其他工程师执行p4 unshelve -c <CL#>后即可直接看到冲突内容排查问题- 脚本执行过程中可通过
p4 changes -s pending -u $USER命令校验当前用户名下的待处理CL是否创建成功
内容的提问来源于stack exchange,提问作者Jesus Fernandez
相关产品推荐
相关产品推荐

