首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何应用Perforce补丁?

如何应用Perforce补丁?
EN

Stack Overflow用户
提问于 2012-02-24 18:59:57
回答 3查看 27K关注 0票数 17

不久前,我使用p4 diff命令生成了一个补丁。

然而,现在我想要应用它,我意识到在Perforce中没有办法应用补丁。

因为我没有使用-du选项,所以补丁是模糊的perforce格式,不能与patch(1)一起应用。原始更改已丢失。此外,该补丁超过300kb长,因此手动编辑不是一个真正的选择。

我有什么选择?是否有补丁转换器,或一些Perforce扩展允许应用这些类型的补丁?

EN

回答 3

Stack Overflow用户

发布于 2016-07-09 05:07:20

也许Perforce的diff输出格式已经改变,但@RumburaK的答案对我不起作用。

我必须修改它以将====标头转换为diff的+++---标头格式。

代码语言:javascript
复制
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

票数 9
EN

Stack Overflow用户

发布于 2012-11-28 23:51:19

在将我的一些更改保存到补丁中并恢复它们以测试一些原始代码后,我发现了您的问题……

假设您使用的是一个不错的终端仿真器,那么这个一次性操作可能需要一个小时左右的时间。

好消息是你不会每天都遇到这个问题,因为从现在开始你可能会用到"-du“,至少我会这样做。只需按照提示复制并粘贴文件名即可:

代码语言:javascript
复制
$ 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):

代码语言:javascript
复制
s/.* - \(.*\) ====/+++: \1/

但是-注意,如果你添加了源代码(整个文件,p4添加),它们的内容可能不会在diff中打印出来-在这种情况下,没有人能够重新修补它们……

票数 3
EN

Stack Overflow用户

发布于 2016-07-09 05:20:05

另一种答案是:p4 diff2命令支持一个-u标志,以便以GNU diff格式生成差异。

来自p4 help diff2

-u标志使用GNU diff -u格式,并且只显示不同的文件。文件名和日期采用Perforce语法,但输出可供修补程序使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9429589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档