対象:Windows 環境、バージョン管理にGitを使用している開発者向け
はじめに
チーム開発やバージョン管理の現場で、「ある2つのコミット間で変更されたファイルだけを取り出して共有したい」「成果物の差分だけをZIPで保存したい」といったニーズは少なくありません。
この記事では、Gitの差分ファイルを抽出し、それをZIPアーカイブにまとめ、処理日の日付をファイル名に含める実用的なバッチスクリプトをご紹介します。
完成形スクリプト
以下は、git diff によって変更されたファイルだけを git archive でまとめ、出力ファイル名に処理日 (YYYYMMDD) を付加するバッチファイルの全体像です。
diff_zip.bat
@echo off
:: パラメータの処理
if "%2" equ "" (
set param1=HEAD
set param2=%1
) else (
set param1=%1
set param2=%2
)
:: PowerShellで日付を取得(YYYYMMDD形式)
for /f %%i in ('powershell -Command "Get-Date -Format yyyyMMdd"') do set datestr=%%i
:: 差分ファイルの取得
setlocal enabledelayedexpansion
set diff=
for /f "usebackq" %%i in (`git diff --name-only --diff-filter=ACMR %param2% %param1%`) do (
set diff=!diff! "%%i"
)
:: zipファイルに日付を追加
git archive --format=zip --prefix=diff_archive/ %param1% %diff% --output=_list-archive_%datestr%.zip
echo 完了: _list-archive_%datestr%.zip が作成されました。各パートの詳しい解説
1. パラメータ処理
if "%2" equ "" (
set param1=HEAD
set param2=%1
)- コマンドライン引数が1つだけの場合は、「
HEADとその1つ前のコミット」の差分を取得。 - 2つ指定された場合は「
param2とparam1」間の差分を取得します。
2. 日付の取得(YYYYMMDD形式)
for /f %%i in ('powershell -Command "Get-Date -Format yyyyMMdd"') do set datestr=%%i- Windowsの
dateコマンドはロケール依存のため、確実にフォーマットできるPowerShellを使います。 - 出力例:
20250715
3. 差分ファイルのリストアップ
git diff --name-only --diff-filter=ACMR %param2% %param1%--name-only:変更ファイル名だけを抽出。--diff-filter=ACMR:追加(A)、コピー(C)、修正(M)、リネーム(R)のみ対象とします。
4. ZIPアーカイブの作成
git archive --format=zip --prefix=diff_archive/ %param1% %diff% --output=_list-archive_%datestr%.zip--prefix=diff_archive/:ZIP内のディレクトリ名。全ファイルがこのディレクトリ下に格納されます。%diff%:差分ファイルのパスリスト。%datestr%:日付付きファイル名にすることで履歴管理が容易になります。
使用例
コミット間の差分を取得してZIP保存
diff_zip.bat a04bbf3b7 a788a434f7生成されるファイル:
_list-archive_20250715.zip中身は、a04bbf3b7 から a788a434f7 の間で追加・変更・コピー・リネームされたファイルだけが diff_archive/ フォルダに格納されたZIPです。
応用:CI/CDや納品に活用
- リリースごとの成果物の自動出力
- 開発中の差分をデザイナーや翻訳者に共有
- クライアントへ変更内容を明示して納品
:: 例: 最新コミットとの差分をZIPで取得
diff_zip.bat 1.2.0トラブルシューティング
| 症状 | 原因と対策 |
|---|---|
pathspec '202507.zip' did not match any files | %diff% 変数が空。コミット間に差分がない、または日付取得に失敗してファイル名が壊れている可能性あり。echo %datestr% で確認。 |
| 日付が文字化けする | date /t を使用していた場合のロケール依存。PowerShellを使えば回避可能。 |
おわりに
このバッチスクリプトは、Git の便利機能を活かしつつ、Windows環境での自動化を実現する実践的なツールです。
「開発と運用の橋渡し」や「履歴付きの成果物アーカイブ」に役立つので、ぜひご自身のプロジェクトに取り入れてみてください。





