Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Perforce命令行搁置变更列表的统一差异_Git_Sed_Diff_Perforce_Patch - Fatal编程技术网

Git Perforce命令行搁置变更列表的统一差异

Git Perforce命令行搁置变更列表的统一差异,git,sed,diff,perforce,patch,Git,Sed,Diff,Perforce,Patch,我知道我朋友的一些变更单。我想把这个CL号传递给Bash脚本,它将为补丁程序生成一个diff文件读取(它将在git repo中重新创建更改) 到目前为止,我有: function p4_shelved_cl_to_diff() { p4 describe -S -du $1 > p4_diff.patch } 它生成差异,但标题为p4格式: ==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) === 而他们应该在 --- dir

我知道我朋友的一些变更单。我想把这个CL号传递给Bash脚本,它将为
补丁
程序生成一个diff文件读取(它将在git repo中重新创建更改)

到目前为止,我有:

function p4_shelved_cl_to_diff()
{
    p4 describe -S -du $1 > p4_diff.patch
}
它生成差异,但标题为p4格式:

==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) ===
而他们应该在

--- dir/file.cpp
+++ dir/file.cpp
所以我要找的是一种特殊的p4语法(谷歌搜索广泛,查阅p4手册-小希望),或者是一个sed/awk/任何能帮我改变的脚本


有什么想法,或者可能有人已经写过了?

这个替代方法适用于您的示例:

$ sed 's|^====.*/\([^/]*/[^#]*\).*===$|--- \1\n+++ \1|' infile
--- dir/file.cpp
+++ dir/file.cpp
它适用于以
===
开头和结尾的行(实际上以
==
结尾,但我相信这只是问题中的一个输入错误,它也适用于以
==
结尾的行)

它捕获倒数第二个
/
#
之间的所有内容,然后在单独的行中添加
--
++


请注意,我没有研究p4 diff头的一般格式,因此在其他情况下可能会出现问题–更好的总体解决方案是修复生成错误头的问题。

尝试此答案中关于转换这些文件头的建议:以及类似的答案:谢谢。第二个更接近我所看到的,但是sed表达式不起作用。本杰明W似乎有工作版本。谢谢!我不是sed向导,但看起来不错,我会在两周后回来工作时尝试:)“倒数第二/”和一般格式-在我得到的实际差异中,dir/file.cpp实际上是类似dir1/dir2/dir3/file.cpp的。我认为脚本应该获取参数-repo上最后一个dir的名称,或者要删除的/的数量,以使其在更一般的意义上工作。是的,最好是让p4生成正常的统一差异。我想现在不可能了,我必须在他们的论坛上大声抱怨,然后等待几周/几个月的修复。