我的问题类似于交互式程序,以选择性地排除差异文件的一部分- 但有些不同......
假设我有以下“原始”文件:
$ cat test-orig.h
int varA;
int varB;
int varC;
int varD;
int varE;
...并说我已将这些更改放入“新”文件中:
$ cat test-newmodified.h
int varA;
int varB;
int varC;
// a couple of lines
// of useless comments
int var_extra1;
int var_extra2;
int varD;
int varE;
那么两者之间的差异将是:
$ diff -Naur test-orig.h test-newmodified.h | tee test.patch
--- test-orig.h 2013-07-18 19:21:25.741027138 +0200
+++ test-newmodified.h 2013-07-18 19:21:19.916998200 +0200
@@ -1,5 +1,9 @@
int varA;
int varB;
int varC;
+// a couple of lines
+// of useless comments
+int var_extra1;
+int var_extra2;
int varD;
int varE;
那么假设我有一个补丁文件,(有很多大块),我想删除“无用注释行”。从diff
生成的补丁文件中删除整个块通常很容易 - 但如果我只想删除一些行,那么差异计数器(在 上方@@ -1,5 +1,9 @@
)也必须修改。比如说,如果文件中的注释行被删除,那么差异将是:
$ diff -Naur test-orig.h test-newmodified-nc.h
--- test-orig.h 2013-07-18 19:21:25.741027138 +0200
+++ test-newmodified-nc.h 2013-07-18 19:26:30.898540270 +0200
@@ -1,5 +1,7 @@
int varA;
int varB;
int varC;
+int var_extra1;
+int var_extra2;
int varD;
int varE;
...也就是说,带有评论的计数器,@@ -1,5 +1,9 @@
- 现在变成了,没有评论,@@ -1,5 +1,7 @@
。
如果我只是从补丁中删除注释行test.patch
(并将该编辑另存为test-edit.patch
),并且不更新计数器,那么我会得到:
$ patch -p0 <test-edit.patch
patching file test-orig.h
patch: **** malformed patch at line 10:
...并且没有应用这样的补丁。那么,如果我只是将中的更改+1,9
为,那么它完全适用:+1.7
test-edit.patch
$ patch -p0 <test-edit.patch
patching file test-orig.h
...并按test-orig.h
预期更改(没有注释行)。
因此,给定一个补丁文件,其中包含与文件相关的所有大块 - 是否有一个(GUI)(文本)编辑器diff
知道(至少,统一差异),这样:当来自大块(或整个大块)的行) 被删除,它会自动更新差异计数器 - 这样编辑的补丁文件仍将干净地应用于原始文件?