找到没有p4解析的diff块

时间:2013-08-08 07:33:32

标签: perforce merge-conflict-resolution

我想设计一个shell脚本,根据'p4 resolve'显示的diff块来解决决策

我的脚本的当前状态类似于 -

p4 integ -b @ = CL#这将打开我默认CL中的文件。

p4 resolve #It现在将逐个解析我在默认CL中打开的文件

现在我的问题是,在p4解析后,我无法将其输出重定向到某个文件或读取diff块,因为它显示一个文件的diff块并等待用户输入以解决决策。我希望脚本能够采取非常明显的解决方案。

那么,有没有办法在我的默认CL中找到文件的diff块?那么,无论如何,我可以阅读这些差异块并做出明显的解决决定吗?

3 个答案:

答案 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文件,然后使用该结果进行最终合并解析。