我想设计一个shell脚本,根据'p4 resolve'显示的diff块来解决决策
我的脚本的当前状态类似于 -
p4 integ -b @ = CL#这将打开我默认CL中的文件。
p4 resolve #It现在将逐个解析我在默认CL中打开的文件
现在我的问题是,在p4解析后,我无法将其输出重定向到某个文件或读取diff块,因为它显示一个文件的diff块并等待用户输入以解决决策。我希望脚本能够采取非常明显的解决方案。
那么,有没有办法在我的默认CL中找到文件的diff块?那么,无论如何,我可以阅读这些差异块并做出明显的解决决定吗?
答案 0 :(得分:2)
我想做类似的事情;输出Jenkins作业中的实际冲突,以便将信息发送给相关的开发工程师。
我注意到jwd提供了方便的p4-dump-conficts脚本,基于此,也许以下就足够了
echo -e "d\ns\n" | P4EDITOR=cat p4 resolve
(即将p4解析为(d)iff然后(s)kip并使用 cat 输出结果。这适用于工作区中的所有“待处理”文件)
答案 1 :(得分:1)
是的,您可以使用p4 resolve -n
打印与p4 resolve
相同的输出,而不会提示输入或采取任何操作。来自the p4 resolve docs:
-n
列出需要解析但未实际执行解析的文件。
答案 2 :(得分:1)
我最近有类似的需求,并用shell脚本一起破解了一个解决方案。
对我来说,问题是p4 resolve
想要互动,但我只是想在文件中看到冲突。
我不想运行p4 resolve -f
,因为这会将文件标记为在Perforce中解析。
我只是想查看冲突,也许会将其发送给其他人,而不是真正做出决定。您可以使用(e)dit
的{{1}}和(s)kip
命令以交互方式执行此操作,但我想要一个不干涉的版本。
将此脚本另存为p4 resolve
:
p4-dump-conflicts
如果您运行#!/usr/bin/env bash
function cat_to_file() {
cat "$@" > "$OUTFILE"
}
export -f cat_to_file
destFileName=$(dirname "$1")/CONFLICTS_$(basename "$1")
OUTFILE="$destFileName" P4EDITOR=cat_to_file p4 resolve "$1" <<END_INPUT
e
s
END_INPUT
,它会写出包含冲突标记的p4-dump-conflicts myfile
。但是,它会使文件在Perforce中无法解析。
注意:仅适用于一个文件。
特别是对于您的问题,您可以根据需要处理CONFLICTS_xxx文件,然后使用该结果进行最终合并解析。