業務で差分ファイルのみをzip形式でアップロードする必要があったため、エイリアスを作成しました。
(もっといろんなエイリアスを作っている人はいっぱいいると思いますが、今のところ自分はこれくらいで十分かな)
マスターとの差分を出す場合と、直前のコミットとの差分を出すときのエイリアスとその中身を見ていければと思います。
#エイリアス
[alias]
al = !git archive HEAD `git diff --name-only master HEAD --diff-filter=ACMR` -o al.zip
dif = !git archive HEAD `git diff --name-only HEAD~1 HEAD --diff-filter=ACMR` -o dif.zip
#中身の解説
al = !git archive HEAD
git diff --name-only master HEAD --diff-filter=ACMR
-o al.zip
##"!"
"!"をつけないとエイリアスの中身に勝手に"git"が入ってしまうため、"!"をつけることで中身がそのまま展開される。
##"git archieve"
git archive [コミットIDなど] -o [ファイル名]
上の形式で指定のコミットを指定のファイル名で出力する。
##git diff --name-only master HEAD --diff-filter=ACMR
git diff [比較ブランチ1] [比較ブランチ2]
でブランチ間の差分を出す。 --name-onlyはファイル名だけを表示させるために必要。
--diff-filter=[]は[]に指定したものをフィルターする。
A:Add=追加
C:Copy=コピー
M:modify=修正
R:Rename=名前変更
つまり上記4つの変更があった差分をファイル名で出力するのが、
git diff --name-only master HEAD --diff-filter=ACMR
まとめると"al"というエイリアスはmasterとHEAD間で「追加」「コピー」「修正」「名前変更」があったファイル名を出力し、git archieveでそれらのファイルをzip形式でまとめている。
Zipが吐き出されるのはそのままだとレポジトリのルート。