开发者社区> 问答> 正文

创建一个补丁,显示更少的删除行

我需要在两个目录中的不同版本的软件之间创建一个补丁,该补丁将交付给我的客户端。他们需要能够将该补丁应用到较旧的版本,以将其更新为较新的版本。由于安全性要求(查找恶意代码等),我必须亲眼阅读此补丁的每一行。我不想读取所有已删除的代码,因为如果有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)-对我而言并不重要,只要补丁仍可以安全地应用即可。

展开
收起
祖安文状元 2020-01-06 16:31:17 358 0
1 条回答
写回答
取消 提交回答
  • 输出被缓冲。您看不到圆点,但它们像发条一样发出。

    如果添加

    fflush(stdout); 或输出字符串的换行符,您应该会看到圆点定期出现。

    2020-01-06 16:31:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载