如何用Python subprocess模块与Helix Core API向Perforce变更列表添加大量文件
解决Perforce批量将1000个文件加入单个变更列表的问题
方法一:用p4 reopen批量关联文件(推荐)
这个方法避开直接在p4 change中塞入超长文件列表的问题,效率高且不易出错:
- 创建空变更列表并获取编号
生成默认变更列表表单并提交,提取返回的变更列表ID:CHANGELIST=$(p4 change -o | p4 change -i | grep -o 'Change [0-9]* created' | awk '{print $2}') - 批量将文件关联到该变更列表
借助-x参数从文件读取路径,用reopen把所有文件转到目标变更列表:
注:如果是未被Perforce跟踪的新文件,需先执行p4 -x path/to/your/filelist.txt reopen -c $CHANGELISTp4 -x path/to/your/filelist.txt add完成添加;如果是移动文件,先执行p4 -x move_paths.txt move,再执行上述reopen命令。
方法二:直接构建变更列表表单提交
如果你偏好直接生成包含所有文件的变更列表表单,可按以下步骤操作:
- 生成基础变更列表模板
p4 change -o > changelist_form.txt - 追加文件列表到表单的
Files字段
Perforce要求Files字段下的每个文件路径需缩进2个空格,先把你的文件列表每行前加空格,再追加到表单的Files行之后:# 在Files字段后插入带缩进的文件列表 sed -i '/^Files:/r <(sed "s/^/ /" path/to/your/filelist.txt)' changelist_form.txt - 提交表单创建变更列表
p4 change -i < changelist_form.txt
关键提示
- 两种方法都避免了命令行字符长度限制,因为文件路径都是从文本文件读取,而非直接写在命令行参数中。
reopen方法无需手动处理表单格式,是更高效可靠的批量操作方式。
内容的提问来源于stack exchange,提问作者corvineMaster
相关产品推荐
相关产品推荐

