标签: patch

为什么在使用 cp 更容易时使用 diff/patch

diff -u file1.txt file2.txt > patchfile
Run Code Online (Sandbox Code Playgroud)

创建一个补丁文件,其中包含patch将 file1.txt 转换为与 file2.txt 完全一样的指令

这不能使用cp命令来完成吗?我可以想象这在文件太大并且必须通过网络传输时很有用,这种方法可能会节省带宽。有没有其他方法可以使用 diff/patch 在其他场景中是有利的?

shell diff patch cp

21
推荐指数
4
解决办法
2428
查看次数

这是创建补丁的好方法吗?

我想从特定gcc分支创建一个补丁,将其与官方版本进行比较;因此,当我从稳定版本中解压缩 tarball 时,我可以应用补丁并获得与该特定分支中的内容相同的内容。

这是我第一次需要创建补丁,所以这是我第一次这样做,我主要关心的是获得正确的选项和解析,因为我们正在谈论一个非常重要的软件

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Run Code Online (Sandbox Code Playgroud)

这是否足够并且是最好的方法?

diff patch

18
推荐指数
1
解决办法
2万
查看次数

如何使补丁忽略已应用的帅哥

我有一个非常大的补丁文件,我正试图将其应用到我的代码中。问题是,我的补丁中的一些更改已经存在于代码中。有没有办法让补丁优雅地忽略已经应用的更改?

-N选项不符合我的要求。如果它遇到一个已经应用的大块,它将生成一个拒绝文件,并且不会再向该文件应用任何大块。我希望它忽略那个大块头并继续应用补丁的其余部分。我希望它生成 .rej 文件的唯一时间是无法应用大块头并且似乎尚未应用。

有没有办法做到这一点?

patch

16
推荐指数
1
解决办法
9700
查看次数

如何应用软件补丁?

我有一个应用程序foobar,有人为其编写了补丁来添加我喜欢的功能。如何使用补丁?

compiling patch software-installation

15
推荐指数
1
解决办法
2929
查看次数

在输入第 3 行找不到要修补的文件

我使用diff上下文行数为 1(-c选项)的命令生成了一个补丁。我的补丁文件内容:

*** /home/sk/abc/def/src/klm/a.py 2015-05-18 16:25:50.348398554 +0530
--- /opt/abc/def/ghi/klm/a.py  2015-05-18 14:27:13.860503469 +0530
***************
*** 72,73 ****
--- 72,74 ----
              output, error, rCommand = "", "", ""
+             import subprocess
              rCommand = self.copyCmd % (self.executor_hostname, self.testId, self.testId)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用这些命令应用补丁时,

cd /
patch -p0 < sg.patch
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出,

can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|*** /home/sk/abc/def/src/klm/a.py  2015-05-18 16:25:50.348398554 +0530
|--- …
Run Code Online (Sandbox Code Playgroud)

diff patch

15
推荐指数
1
解决办法
5万
查看次数

两个类似的大原始二进制文件的差异

假设abc我的本地计算机上有一个 4 GB 的文件。我已通过 SFTP 将其上传到远程服务器,花了几个小时。

现在我在本地稍微修改了该文件(最大可能为 50 MB,但不是此文件中的连续字节),并将其保存到abc2. 我还将原始文件保存在abc本地计算机上。

如何计算的二进制差异abcabc2

应用:

  • 我只能向patch远程服务器发送一个文件(可能最大 100MB),而不是重新上传整个abc2文件(又需要几个小时!),并且仅abc2在远程服务器上重新创建。abcpatch

  • 在本地,与其浪费 8 GB 来备份abcand abc2,我只能保存abc+ patch,因此只需要 < 4100 MB。

这该怎么做?

PS:对于文本,我知道diff,但在这里我正在寻找适用于任何原始二进制格式的东西,它可以是 zip 文件或可执行文件,甚至其他类型的文件。

PS2:如果可能,我不想使用rsync;我知道它可以以有效的方式复制两台计算机之间的更改(不重新发送未更改的数据),但在这里我真的想要一个patch文件,如果我同时拥有abcpatch.

diff patch binary files

14
推荐指数
1
解决办法
6975
查看次数

如何拆分和编辑补丁?

有时我需要将一个大补丁分成更小的(不相交的)补丁,例如对于包含的每个单独的功能。

通常我通过标准的 vim yank/dd 命令和拆分窗口切换来完成。

但是是否有一些工具/vim 技巧可以帮助进行这种编辑?

例如支持如下命令:将 3 个下一个完整的块移动到打开的补丁文件中

vim patch

10
推荐指数
2
解决办法
7840
查看次数

将差异应用到带有补丁的 wget 源时出现“格式错误的补丁”错误

我想应用此补丁,因此我复制了以“Index: src/options.h”开头并以“+@item”结尾的代码,并将其放入在wget的源代码文件夹中创建的新文件中。然后我做了:

$ patch -p0 < name_of_patch
(Patch is indented 1 space.)
patching file src/options.h
patch: **** malformed patch at line 6: char **excludes; /* List of excluded FTP directories. */
Run Code Online (Sandbox Code Playgroud)

我应该如何应用这个?

这是我创建的文件的内容:

 Index: src/options.h
 ===================================================================
 --- src/options.h (revision 2276)
 +++ src/options.h (working copy)
 @@ -62,6 +62,8 @@
 char **excludes; /* List of excluded FTP directories. */
 char **includes; /* List of FTP directories to
 follow. */
 + int maxsize; /* Maximum file size (kB) */ …
Run Code Online (Sandbox Code Playgroud)

patch wget

10
推荐指数
1
解决办法
2万
查看次数

如何将新文件包含到补丁中

我尝试制作此处介绍的补丁。
说我有两个目录pp1(modified version)pp0(clean version)我打个补丁文件,pp0.patchdiff命令:

 diff -crB pp0 pp1 > pp0.patch
Run Code Online (Sandbox Code Playgroud)

问题是如果只有 pp1 中有一个文件,它不会包含在补丁中。如何解决它?

更新
我首先进入pp0目录,测试补丁是否成功

  patch --dry-run -p1 -i /path-to-pp0.patch
Run Code Online (Sandbox Code Playgroud)

虽然我已经添加--new-filediff命令中,但pp1结果中没有列出那些只在

更新
我不小心修补了错误的文件,所以

  diff -crb --new-file pp1 pp0 > pp0.patch
Run Code Online (Sandbox Code Playgroud)

或者

  diff -crNb pp1 pp0 > pp0.patch
Run Code Online (Sandbox Code Playgroud)

会做

diff patch

9
推荐指数
1
解决办法
3万
查看次数

如果成功逆转补丁,是否总是意味着补丁已被完全应用?

这是在两个问题上触摸“检查文件或文件夹已被修补”和“制作patch返回跳过已经应用的补丁时0 ”既不但是有一个令人满意的答案。

我正在编写脚本并想测试以下补丁:

完全应用:继续

部分应用:退出

未应用:如果可以成功应用则继续,否则退出

问题是处理部分应用的情况:

mkdir test && cd test

cat << EOF > foobar.patch
--- /dev/null
+++ foo
@@ -0,0 +1 @@
+foo
--- /dev/null
+++ bar
@@ -0,0 +1 @@
+bar
EOF

patch --forward -i foobar.patch
rm foo
Run Code Online (Sandbox Code Playgroud)

所以 bar 存在但 foo 不存在,因为在某些时候它被删除了。现在,如果我在试运行中向前应用补丁,退出代码为 1,因为它没有成功应用。

$ patch --dry-run --forward --force -i foobar.patch
checking file foo
The next patch would create the file bar,
which already exists!  Skipping patch.
1 out of 1 …
Run Code Online (Sandbox Code Playgroud)

patch

9
推荐指数
1
解决办法
3235
查看次数

标签 统计

patch ×10

diff ×5

binary ×1

compiling ×1

cp ×1

files ×1

shell ×1

software-installation ×1

vim ×1

wget ×1