不久前,我使用p4 diff命令生成了一个补丁。
然而,现在我想要应用它,我意识到在Perforce中没有办法应用补丁。
因为我没有使用-du选项,所以补丁是模糊的perforce格式,不能与patch(1)一起应用。原始更改已丢失。此外,该补丁超过300kb长,因此手动编辑不是一个真正的选择。
我有什么选择?是否有补丁转换器,或一些Perforce扩展允许应用这些类型的补丁?
发布于 2016-07-09 05:07:20
也许Perforce的diff输出格式已经改变,但@RumburaK的答案对我不起作用。
我必须修改它以将====标头转换为diff的+++和---标头格式。
sed -Ee 's|==== (//.*)#[0-9]+(.*)|+++ \1\n--- \1|' < infile.txt > outfile.txt使用以下命令生成infile.txt (其中12335是搁置的更改列表):p4 describe -du -S 12345
使用以下命令应用outfile.txt:patch -p3 -l < outfile.txt
发布于 2012-11-28 23:51:19
在将我的一些更改保存到补丁中并恢复它们以测试一些原始代码后,我发现了您的问题……
假设您使用的是一个不错的终端仿真器,那么这个一次性操作可能需要一个小时左右的时间。
好消息是你不会每天都遇到这个问题,因为从现在开始你可能会用到"-du“,至少我会这样做。只需按照提示复制并粘贴文件名即可:
$ patch -i cucu.diff
can't find file to patch at input line 2
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|==== //depot/foo/boo.cpp#1 - /home/who/perforce/foo/boo.cpp ====
--------------------------
File to patch:
<double-click!> to copy
<middle-click!> to paste
File to patch: /home/who/perforce/foo/boo.cpp <CR>也许你会在补丁中有100个文件...继续点击:-)
如果您正在寻找subst表达式(vim,sed):
s/.* - \(.*\) ====/+++: \1/但是-注意,如果你添加了源代码(整个文件,p4添加),它们的内容可能不会在diff中打印出来-在这种情况下,没有人能够重新修补它们……
发布于 2016-07-09 05:20:05
另一种答案是:p4 diff2命令支持一个-u标志,以便以GNU diff格式生成差异。
来自p4 help diff2
-u标志使用GNU diff -u格式,并且只显示不同的文件。文件名和日期采用Perforce语法,但输出可供修补程序使用。
https://stackoverflow.com/questions/9429589
复制相似问题