我需要在两个目录中的不同版本的软件之间创建一个补丁,该补丁将交付给我的客户端。他们需要能够将该补丁应用到较旧的版本,以将其更新为较新的版本。由于安全性要求(查找恶意代码等),我必须亲眼阅读此补丁的每一行。我不想读取所有已删除的代码,因为如果有15万行删除的行和10万行添加的行,那么我必须通读25万行,而实际上只有其中的10万行值得阅读。
目前,我将使用以下方法创建补丁:
diff -N -r --unified=1 old new > patch.diff
然后使用以下命令应用补丁:
cp -r old new
cd new
patch -N -p1 < ../patch.diff
例如,我有以下目录结构:
[user@hostname test]$ tree -af
.
├── ./new
│ ├── ./new/a.txt
│ ├── ./new/b.txt
│ └── ./new/c.txt
└── ./old
├── ./old/a.txt
└── ./old/c.txt
在新版本中,添加了新文件b.txt,修改了a.txt,并且c.txt删除了所有行,但仍然存在。运行我当前的补丁创建将导致以下差异:
[user@hostname test]$ diff -N -r --unified=1 old new
diff -N -r '--unified=1' old/a.txt new/a.txt
--- old/a.txt 2019-07-01 18:09:59.586410797 -0400
+++ new/a.txt 2019-07-01 18:17:19.680446218 -0400
@@ -3,2 +3,3 @@
a
+h
a
@@ -8,2 +9,3 @@
a
+awdwd
a
@@ -11,23 +13,5 @@
a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
b
+foo
+bar
b
@@ -39,2 +23,9 @@
c
+d
+d
+d
+d
+d
+d
+d
diff -N -r '--unified=1' old/b.txt new/b.txt
--- old/b.txt 1969-12-31 19:00:00.000000000 -0500
+++ new/b.txt 2019-07-01 18:10:52.943204070 -0400
@@ -0,0 +1 @@
+this is an entirely new file
diff -N -r '--unified=1' old/c.txt new/c.txt
--- old/c.txt 2019-07-01 18:16:11.820985994 -0400
+++ new/c.txt 2019-07-01 18:14:59.775620402 -0400
@@ -1 +0,0 @@
-this is a file that will be empty in the new version
理想情况下,我不必阅读a.txt中所有已删除的“ b”行。补丁文件可能只是指示要删除的行号而不包含其内容,或者折叠整个删除的部分(大于N)-对我而言并不重要,只要补丁仍可以安全地应用即可。
输出被缓冲。您看不到圆点,但它们像发条一样发出。
如果添加
fflush(stdout); 或输出字符串的换行符,您应该会看到圆点定期出现。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。