LoginSignup
8
12

More than 5 years have passed since last update.

git で差分納品用の zipファイル を作成しつつ、不要なファイルは含めないようにする

Last updated at Posted at 2017-03-16

あるコミット間の差分ファイルだけを取り出して、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`

こんなかんじです。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12