あるコミット間の差分ファイルだけを取り出して、zip にまとめたい。かつ、一部条件のファイルは zip 内に含めたくない、という場合の設定方法です。
差分納品作業のときなどに便利。
【追記】
↓会社のブログに、もうちょっと丁寧に書き直しました
https://www.tam-tam.co.jp/tipsnote/program/post12992.html
コマンド例
git archive master --format=zip -o output.zip --prefix=data/ `git diff --name-only --diff-filter=d tag1 tag2`
このコマンドと、 .gitattributes ファイルでの設定とを組合せます。
説明
まずは git diff
tag1 と tag2 のコミット間の差分を取り出すには、以下
git diff --name-only --diff-filter=d tag1 tag2
tag1
とかのところはタグでもブランチ名でもコミットIDでもかまわない
--name-only
で、ファイル名のみをリスト出力する
--diff-filter=d
で、削除されたファイルは出力させない (納品には不要なため)
次に git archive
指定されたブランチの、ファイルをまとめてくれる。
git archive master --format=zip -o output.zip --prefix=data/ (ここにファイルリストを入れる)
masterブランチを対象とし、--format
で圧縮フォーマットをzipに指定、出力先を -o
オプションで設定。
--prefix=
は、圧縮ファイル内にフォルダ階層を作ってくれて便利。(末尾にスラッシュがないとフォルダを作らず、ファイル名のプレフィクスとなるので注意)
不要ファイルを除外する設定
たとえば /dev/src
配下のファイルは、zip内に含めたくないという場合。
.gitattributes ファイルにて設定が可能。
/dev/src export-ignore
このような記述の書かれた .gitattributes がある状態で git archive
を実行すると、指定されたファイルやフォルダはアーカイブされなくなる。
以上を組み合わせる
前述の git archive
の (ここにファイルリストを入れる)
の部分に、git diff
コマンドを埋め込む。
以上で、冒頭のコマンドとなります。
git archive master --format=zip -o output.zip --prefix=data/ `git diff --name-only --diff-filter=d tag1 tag2`
こんなかんじです。