2012-03-09 15 views
0

「新しい」ファイルに別の名前を使用せずにdiff -uを使用して標準パッチを作成するにはどうすればよいですか?ターゲットファイルの名前を変更せずにパッチを適用する

私がsubmitted a patch for an Apache projectのとき、コミッタはパッチを提出するときにファイルの名前を変更する必要はないと教えてくれました。 「新しい」ファイルの名前はパッチターゲットの名前と何らかの形で一致するはずですが、同じ名前の同じディレクトリに置くことはできません。

diff -u Source-old.java Source.java 

の代わり:

diff -u Source.java Source-new.java 

は、それは私が使用している必要がありますように "古い" ファイルを、名前を変更する(パッチ適用を容易にするため)大丈夫でしょうか?

答えて

1

既存のプロジェクト 'a'を指定すると、プロジェクト全体を 'b'にコピーし、 'b'を変更します。元のディレクトリとコピーしたディレクトリとの間にdiffを生成します。

例えば、ディレクトリにチェックアウトまたはダウンロードプロジェクトは、 ''、 '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 

$ tree a 
a 
`-- dir 
    |-- Bar.java 
    `-- Foo.java 

$ cp -r a b 

$ tree b 
b 
`-- dir 
    |-- Bar.java 
    `-- Foo.java 

は 'B'(とのみ 'B')を変更しますもう一つの方法は、オリジナルのソースを一時的なローカルgitリポジトリに保存し、gitの組み込みのdiffを使ってパッチを生成することです。または、元のソースがgitを使用している場合は、リポジトリを複製してソースツリー自体で直接作業し、(まだ)gitを使用してパッチを生成してください。

+0

申し訳ありません私は自分の質問に早く答えなかったが、 'svn diff'は私のために(git diffのように) – RubyTuesdayDONO

関連する問題