如何使用diff -u
创建标准补丁而不使用“新”文件的其他名称?
当我submitted a patch for an Apache project时,提交者建议我在提交补丁时不需要重命名文件。我可以理解这是如何打破修补,因为“新”文件的名称应该以某种方式匹配修补程序目标的名称 - 但是它们不能在同一目录中具有相同的名称。
是否可以(为了便于修补)重命名“旧”文件,以便我应该使用:
diff -u Source-old.java Source.java
而不是:
diff -u Source.java Source-new.java
答案 0 :(得分:1)
鉴于现有项目'a',将整个项目复制到'b',在'b'中进行更改。在原始目录和复制的目录之间生成差异。
,检查或下载项目到目录'a',复制到'b':
$ tree a
a
`-- dir
|-- Bar.java
`-- Foo.java
$ cp -r a b
$ tree b
b
`-- dir
|-- Bar.java
`-- Foo.java
对'b'进行更改(仅限'b'):
$ diff -r -s a b
Files a/dir/Bar.java and b/dir/Bar.java are identical
Files a/dir/Foo.java and b/dir/Foo.java are identical
$ sed -i 's/Foo.*$/& \/* Change...*\//' b/dir/Foo.java
$ diff -ruN a b | tee a.patch
diff -ruN a/dir/Foo.java b/dir/Foo.java
--- a/dir/Foo.java 2012-08-02 18:41:39.444720785 -0700
+++ b/dir/Foo.java 2012-08-02 18:46:45.319932802 -0700
@@ -1,2 +1,2 @@
package dir;
-public class Foo {}
+public class Foo {} /* Change...*/
$ gzip a.patch
另一种方法是将原始源存储在临时的本地git存储库中,然后使用git的内置diff
来生成补丁。或者,更好的是,如果原始源使用git,那么只需克隆repo并直接在源树本身中工作,并且(仍)使用git生成补丁。