Perforce 查找没有p4解析的差异块

Perforce 查找没有p4解析的差异块,perforce,merge-conflict-resolution,Perforce,Merge Conflict Resolution,我想设计一个shell脚本,它将根据“p4 resolve”所示的diff块做出解析决策 我脚本的当前状态类似于- p4 integ-b@=CL#这将在我的默认CL中打开文件 p4 resolve#它现在将逐个解析在默认CL中打开的文件 现在我的问题是,使用p4 resolve,我无法将其输出重定向到某个文件,也无法读取差异块,因为它显示一个文件的差异块,并等待用户输入进行解析决策。我想让剧本做出一个非常明显的决定 那么,有没有办法找到默认CL中文件的差异块?因此,我无论如何都可以阅读这些差异块

我想设计一个shell脚本,它将根据“p4 resolve”所示的diff块做出解析决策

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

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

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

现在我的问题是,使用p4 resolve,我无法将其输出重定向到某个文件,也无法读取差异块,因为它显示一个文件的差异块,并等待用户输入进行解析决策。我想让剧本做出一个非常明显的决定


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

是的,您可以使用
p4 resolve-n
打印与
p4 resolve
相同的输出,而无需提示输入或采取任何操作。发件人:

-n
列出需要解析而不实际执行解析的文件


我最近也有类似的需求,并用shell脚本拼凑出了一个解决方案

对我来说,问题在于,
p4 resolve
希望具有交互性,但我只希望看到文件中的冲突

我不想运行
p4 resolve-f
,因为这样会将文件标记为在Perforce中已解析

我只是想查看冲突,也许通过电子邮件发送给其他人,而不是真正解决冲突。您可以使用
p4 resolve
(e)dit
(s)kip
命令以交互方式执行此操作,但我想要一个不需要动手的版本

将此脚本另存为
p4转储冲突

#!/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
#/usr/bin/env bash
函数cat_to_文件(){
类别“$@”>“$OUTFILE”
}
导出-f cat_到_文件
destFileName=$(dirname“$1”)/conflications_$(basename“$1”)

OUTFILE=“$destFileName”P4EDITOR=cat_to_file p4 resolve“$1”我想做类似的事情;输出Jenkins作业中的实际冲突,以便将信息发送给相关的开发工程师

我注意到jwd编写的方便的p4 dump conficts脚本,基于此,也许下面的内容就足够了

echo -e "d\ns\n" | P4EDITOR=cat p4 resolve

(即,将p4解析为(d)iff,然后是(s)kip,并使用cat输出结果。这适用于工作区中的所有“待定”文件)

您是计划对差异进行分析,还是仅应用解析方法?后者可以使用
p4 resolve-as
-am
执行安全或合并解析,也可以使用其他选项。如果您计划使用脚本进行进一步分析,您可能希望使用
p4 resolve-af
将冲突嵌入到文件中,然后通过查看文件中的冲突指示器来执行分析(
>>
感谢您的回复。我试图做的是在某个文件或变量中捕获以数字形式存在的差异块,并在冲突情况下,如果该差异块为非零,则执行一些操作。Performce文档说,关于-af选项“强制接受。无论如何都要接受合并文件。如果合并文件有冲突标记,它们将保留在中,您需要通过编辑文件来删除它们。”这不是我的要求:请帮助…我建议
-af
的原因是将冲突指示符放入文件中,以便您可以找到冲突。您必须使用
grep
或其他处理器来处理它们,以确定冲突的位置。除非您这样做,否则您无法直接找到冲突。这,到据我所知,这是从
p4
获取冲突的唯一方法,而无需手动解析文件。您需要一种获取冲突的方法,以便可以读取它们,而
-af
就是这样。然后,您可以编写代码来查找
来查找和操作冲突。但这只是打印fil列表是的。它不输出差异块或冲突详细信息。这个解决方案可以工作,但你能解释它是如何工作的吗?将P4EDITOR更改为cat_to_文件p4 resolve$1实际上是如何将冲突标记输出到文件OUTFILE的?@user2635911:如果我理解你的评论,我想你误解了P4EDITOR的设置方式。一般来说,对于
 bash
(以及
sh
和其他),如果您编写
X=foo mycommand
,那么它将运行
mycommand
,环境变量X的值
foo
用于该运行。因此,在我的例子中,它不会“将P4EDITOR更改为cat\u to\u文件p4解析$1”“。相反,它将P4EDITOR更改为
cat_to_file
,然后调用
p4 resolve$1
命令。该命令然后调用编辑器来完成工作。我们使用的是非交互式“编辑器”(只是转储文件的脚本)。