Gitで差分ファイルだけ取り出したい

どーも、gitできないおじさんです。

gitで差分ファイルを抽出して、変更前と変更後の比較をしたい。でもgit diffはいやだ。というよくわからない要望。

えらい人が「レビューしたいからwinmergeで見れるようにしてくれ」とか、納品先が「差分ファイルのみzipでくれ」みたいなことを言うのは割と開発現場あるあるですよね。

こんな時、心を込めて手作業で1つ1つコピーするのはいけてないエンジニアです。
「楽をするな!心を込めて1つ1つ手作業でコピーしろ」とか言う人は帰って、どうぞ。

※1つ1つコピーをすることに疑問を持たない人が割と多くて困る

スポンサーリンク

今までやってた方法

gitできないおじさん的にあみだした方法は、
git diff したファイルリストをxargsでcpコマンドに渡す、ダサい方法です。

$git diff --name-only HEAD~ | xargs cp --parents --target-directory <コピー先>/after

え?変更前のファイルも欲しいの?

$git diff --name-only > hoge.txt
$git checkout HEAD~
$cat hoge.txt | xargs cp --parents --target-directory <コピー先>/before

これで、劇的ビフォーアフターできますね。

でもいちいち変更前のをチェックアウトしなきゃいけないのがダサいです。

イケメンエンジニアはこうする!

最近のイケメンエンジニアは、配管工のようにパイプでつないでごにょごにょ、みたいなダサいことはしないです。

git archive でイッパツだね!

$git archive --prefix=before/ HEAD^ `git diff --name-only HEAD^` -o before.zip
$git archive --prefix=after/ HEAD `git diff --name-only HEAD^` -o after.zip

あれ?あんまりいけてない気がする。

git show でイッパツだね!

なんかできそうな気がしたけどよくわからないや。

HELP!

イケメンエンジニアからのいけてる回答をお待ちしております。

おまけ

席まできてくれたらmeldで見せてあげられるのにね。

$git difftool HEAD~ HEAD

えらい人「winmerge以外信用できない!」

大丈夫、Windowsにmsys-gitかなんか入れておきましょう。

私は断然 beyond compare派ですがライセンス買ってもらえません。

まとめ

xargsかわいいよxargs

スポンサーリンク

フォローする