如何应用Perforce补丁?

sla*_*ppy 15 diff perforce patch

我前段时间使用该p4 diff命令生成了一个补丁.

但是,现在我想应用它,我意识到没有办法在Perforce中应用补丁.

由于我没有使用该-du选项,因此补丁采用那种模糊的perforce格式,无法应用patch(1).原来的变化已经丢失.此外,该补丁超过300kb,因此手动编辑不是一个真正的选择.

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

Jas*_*ler 7

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

我不得不修改它以将====标题转换为diff +++---标题格式.

sed -Ee 's|==== (//.*)#[0-9]+(.*)|+++ \1\n--- \1|' < infile.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)

使用以下命令生成infile.txt(其中12335是搁置的更改列表): p4 describe -du -S 12345

使用以下命令应用outfile.txt: patch -p3 -l < outfile.txt


Rum*_*raK 3

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

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

好处是你不会每天都遇到这种情况,因为从现在开始你可能会使用“-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>
Run Code Online (Sandbox Code Playgroud)

也许您的补丁中有 100 个文件...继续点击:-)

如果您正在寻找 subst 表达式(vim、sed):

s/.* - \(.*\) ====/+++: \1/
Run Code Online (Sandbox Code Playgroud)

但是 - 请注意,如果您添加了源(整个文件,p4 添加),它们的内容可能不会打印在差异中 - 在这种情况下,没有人能够重新修补它们......