Git Perforce命令行搁置变更列表的统一差异
我知道我朋友的一些变更单。我想把这个CL号传递给Bash脚本,它将为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
补丁
程序生成一个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生成正常的统一差异。我想现在不可能了,我必须在他们的论坛上大声抱怨,然后等待几周/几个月的修复。