git apply を dry run する方法
Git の git apply
コマンドを、実際にファイルを変更することなく事前にチェックしたいことがあります。
そういうときに取りうるオプションとしてどんなものがあるかをまとめました。
尚、今回の動作確認には Git のバージョン 2.17.0
を使用しました。
- a) パッチが問題なく適用できるかどうかを知りたい
- b) パッチの概要を知りたい
a) パッチが問題なく適用できるかどうかを知りたい
git apply
を実際に実行したときにパッチが問題なく適用できるかどうかを知りたい場合は、 --check
オプションが便利です。
--check
オプションを使用すると、実際にファイルに変更を加えることなく、パッチを問題なく適用することができるのかどうかをチェックできます。
問題がない場合:
$ git apply --check sample.patch
問題がある場合:
$ git apply sample.patch
error: patch failed: app/articles/templates/articles/teaser.html:10
error: app/articles/templates/articles/teaser.html: patch does not apply
問題がない場合は、終了ステータスが 0
で、標準出力に何も出力されません。
逆に問題がある場合は、終了ステータスが 1
で、標準エラーに上のようなエラーメッセージが出力されます。
b) パッチの概要を知りたい
対象のパッチの概要を知りたい場合は次の 3 つのオプションが便利です。
--summary
--stat
--numstat
--summary
--summary
オプションを使うと、ファイルの追加・移動・削除やファイルパーミッション( mode )の変更等の大きな変更のみをチェックすることができます。
--check
と同じくファイルには変更を加えません。
取り上げるべき変更がない場合:
$ git apply --summary sample2.patch
取り上げるべき変更がある場合:
$ git apply --summary sample2.patch
create mode 100644 install.php
mode change 100644 => 100755 index.php
--stat
--stat
オプションを使うと、ファイルに変更を加えることなく、パッチの統計情報のみ確認することができます。
$ git apply --stat node-232327-93.patch
modules/node/content_types.inc | 8 +++++---
modules/node/node.test | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 3 deletions(-)
変更の加えられる各ファイルに対して、行の追加・削除がどれだけあるのかを人間が見て読みやすい形式で表示してくれます。
--numstat
--numstat
オプションを使うと、ファイルに変更を加えることなく、パッチの統計情報のみ確認することができます。
$ git apply --numstat node-232327-93.patch
5 3 modules/node/content_types.inc
36 0 modules/node/node.test
--numstat
も --stat
と同様のふるまいをしますが、出力を他のプログラムで処理することを想定していて machine friendly な点が --stat
とは異なります。
--numstat
はポイントだけを一切装飾を加えずに出力します。
また、 --stat
は読みやすさのために対象ファイル名を省略したりしますが、 --numstat
はそのようなことも行いません。
--numstat
を使う場合は、追加で -z
オプションを指定することができます。
-z
を指定しないとファイル名の特殊文字が munge されますが、 -z
を指定した場合は特殊文字もそのまま出力されます。
ただし -z
オプションを指定した場合は行区切りが NULL 文字になるようです。
ファイル名に日本語が含まれる場合等は -z
オプションを使うと便利かもしれません。
以上です。