2011-01-07 33 views
72

'git format-patch'と 'git diff'の出力の違いはありませんか?そして、私は 'git diff'を使ってパッチを作成し、git applyを使ってそれを適用することはできませんか?'git format-patchと' git diff 'の違いは何ですか?

私の問題は、インデックスに変更が加えられているようですが、明らかにgit形式のパッチはコミットしか受け付けないため、diffの出力を使用できる場合は、このコマンドを使用して変更のパッチを生成できます。インデックス:

git diff --cached > index.patch 

答えて

108

git format-patchで作成したパッチもコミット(コミッター、日付、メッセージをコミット、...)と意志に関するいくつかのメタ情報は、バイナリデータの差分が含まれて含まれます。すべてがメールとしてフォーマットされ、簡単に送信できます。それを受け取った人はgit amで対応するコミットを再作成することができ、すべてのメタデータは元のままです。シンプルな差分のスーパーセットですので、git applyでも適用できます。

git diffで作成されたパッチは、コンテキストが単純なdiffとなります(diff -uと考える)。 git applyでも適用できますが、メタデータは再作成されません(存在しないため)。

要約すると、git format-patchはコミットを送信するのに便利ですが、git diffは2つのツリー間で差分を取得するのに便利です。

8

マニュアルからgit-format-patchは電子メール提出に適したパッチを用意していますが、git-diffは変更を示しています。

これらは2つの異なるもので、それぞれ異なる目的を持っており、パッチフォーマットを出力します。しかし、git-format-patchはコミット(日付、作者、コミットメッセージ)に関するデータを追加し、Unixメールメッセージとして送信するのに適した形式にまとめます(これらは単なるファイルなので、他の方法に送信してそのまま適用できます) git-amによって)

また、git-format-patchは、指定した範囲のコミットごとにパッチファイルを生成します。これらの変更は、git-amでリポジトリにコミットとして追加されます。

git-diffあなたが求めている2つの状態の違いを示しているだけで、パッチファイルの作成に使用できます。しかしこれは通常のパッチファイルであり、パッチを適用すると作業ディレクトリの状態が変更されます。

はい、そうした方法でインデックス用のパッチを作成できます。

+0

ありがとうございました。 UNIXメールの特別な点は、それに基づいてパッチを設計することです。 – Rafid

+7

本当に特別なことは何もありません。これはLinus Torvaldsによって設計されたgitで、Linuxカーネルに統合される前に検証用の電子メールでパッチを送受信するという作業です。 –

+0

Linuxカーネルを維持するためにGitは[Linus Torvaldsによって設計されました](http://youtu.be/4XpnKHJAok8)でした。Unixメールは一般的な形式でした。 – Abizern

関連する問題