gitを用いてソース運用を行っていく中で、とある地点から変更があったものだけを抽出して納品したい場合、git diffコマンド有効的です。
本記事では、git diff コマンドを用いた差分ファイル作成方法を詳しく解説します。
git archive コミットID `git diff --name-only 新しいコミットID 古いコミットID --diff-filter=d` -o ファイル名.zip
このgitコマンドでは、古いコミットID から 新しいコミットID までの差分(変更点)を抽出し、zipファイルで保存するコマンドです。
git archiveコマンドは、指定されたコミット、ブランチ、ツリーなどのGit Refからアーカイブファイルを作成します。
--diff-filter=dは、コミット間で削除されたファイルを除外するコマンドです。これがないと、削除したファイルも差分ファイルとして格納されて、削除したいのに間違ってサーバーにアップロードしてしまった、なんてことが発生します。
もし先方側でファイルをFTPなどで直接アップデートするような運用方法の場合、納品ファイルと共にdeleteするファイルも一緒に共有するようにしてください。
ちなみにdiff-filter=dをdiff-filter=Dと大文字にすることで、削除されたファイルのみが抽出されます。これは--diff-filter=R(リネームされたファイル)や--diff-filter=A(追加されたファイル)も同様です。
-oは出力ファイルを示すために使用されます。saveNameのところは、保存したいファイル名を入力します。
たとえば、コミットID:0000000000とコミットID:1111111111間の取得して20250401納品分というファイル名でzip形式で保存したい場合、以下のようなコマンドになります。
git archive 0000000000 `git diff --name-only 1111111111 0000000000 --diff-filter=d` -o 20250401納品分.zip