これはパッチを作成する良い方法ですか?


15

gcc公式リリースと比較する特定のブランチからパッチを作成したいと思います。そのため、安定版リリースからtarballを展開すると、パッチを適用し、その特定のブランチにあったものと同等のものを取得できます。

パッチを作成する必要があるのはこれが初めてなので、これを行うのは初めてであり、ソフトウェアの非常に重要な部分について話しているので、私の主な関心事はオプションと解析を正しくすることです

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch

これで十分ですか?それを行う最良の方法ですか?


ここでの通常の優良事例には、バージョン管理またはこれらのいくつかの変形が含まれます。これには、mercurial、git、および関連するパッチキュー拡張機能が含まれます。キルトも検討できます。おそらく、あなたがやろうとしていることに関してより詳細に進むことができますか?
ファヒームミサ

@FaheemMitha「詳細」とはどういう意味ですか?私はgcc公式の安定tar.bz2版のバージョンとgitリポジトリの別の不安定バージョンを持っています。パッチを作成したいのですが、もちろんmasterリポジトリ全体ではなくブランチと比較したいと思います。
user2485710

OK、まあ、diffのような単純なものを使用できることを確認してください。ただし、一般にバージョン管理を使用することをお勧めします。一つには、あなたが何をしているかを見失うのがずっと難しくなります。
ファヒムミサ

@FaheemMithaあなたが提案していることを理解していません。私tar.bz2gitリポジトリは明らかにリポジトリではありません。どうすれば先に進むべきだと思いますか?
user2485710

1
「バージョン管理を使用してパッチを作成する」を検索してください。関連する2つの以前の回答は、unix.stackexchange.com / a
Faheem Mitha

回答:


20

はい、これはパッチを作成する良い方法です。

要するに:

  1. 単一ファイルのパッチを作成するには、コマンドは次のようになります

    diff -Naru file_original file_updated > file.patch

    どこ

    • -N:存在しないファイルを空として扱う
    • -a:すべてのファイルをテキストとして扱う
    • -r:見つかったサブディレクトリを再帰的に比較します
    • -u:NUM(デフォルト3)行の統合コンテキストを出力します
  2. ディレクトリ全体のパッチを作成するには:

    diff -crB dir_original dir_updated > dfile.patch

    どこ

    • -c:コピーされたコンテキストのNUM(デフォルト3)行を出力します
    • -r:サブディレクトリを再帰的に比較します
    • -B:行がすべて空白である変更を無視します

結局のところ、このパッチを適用するには実行することができます

patch -p1 --dry-run < dfile.patch

スイッチはp、ファイルが正しく識別されるようにパスプレフィックスを削除するようにパッチに指示します。ほとんどの場合、である必要があります1

--dry-run画面に印刷された結果に満足したら削除します。


質問:ディレクトリまたはファイルが削除された場合、それdir_updatedがあった場合と比較してどうなりdir_originalますか?diffあまりにもそれの世話をするか、それがスキップされますか?
user2485710 14年

@ user2485710 diffは、削除されたファイルを確認します。file.patch単なるテキストファイルで、あなたは任意のエディタで開き、または単にすることができcat、それを、あなたがラインのように表示されますonly in dir_original: missingfile.txt
jimmij

わかりましたが、それpatchを削除しmissingfile.txtますか?
user2485710

場合によります。それらを削除する場合diff -N ...は、最初の例のように使用します。通常patch、デフォルトで空のファイルを削除します。必要ない場合diff -crBは、質問のとおりに使用してください。また、いくつかの(まれ)のケースの中-Eでオプションpatchコマンドは、パッチ手動た後、空のファイルを削除するために必要とされている:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
jimmij

私はパッチの最初の行でタイムスタンプ付きの2番目の行をdiff -Naru dir/file dir/file.new > diff.patch取得can't find file to patch at input line 3して実行しましたが、差分はちょうどいいようですが、コマンドが探している正確なファイル名を報告するオプションはありますか?patch -p0 --dry-run < diff.patch--- dir/file+++ dir/file.new
ptica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.