【Git】SourceTreeで差分ファイルのみzip圧縮(改修版)

2020年5月20日 2020年5月20日 便利ツール・アプリ ,

「sourcetree 差分抽出」などのワードで検索してみると、やり方はたくさん出てきます

ところが、検索上位にある記事のそのほとんどが、部分的に間違いが存在している状況です。
私はこの間違いに気づかず、エラーが頻発して困っていました。

そのエラーは、コミット間で削除したファイルが存在する場合に出ます。

本記事は、エラーを解消した差分ファイル抽出【訂正版】のエントリーとなります。

バッチファイルを作成

「export_diff_zip.bat」というファイル名のバッチファイルをテキストツールなどで作成します。

if "%2" EQU "" (
  set PARAM1=HEAD
  set PARAM2=%1
) else (
  set PARAM1=%1
  set PARAM2=%2
)

setlocal enabledelayedexpansion
set RET_DIR=
for /F "usebackq" %%i in (`git diff --name-only %PARAM1% %PARAM2%`) do (
  set RET_DIR=!RET_DIR! "%%i"
)

git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o archive.zip

多くの記事では上記コードを紹介していますが、実は git diff --name-only %PARAM1% %PARAM2% の部分が間違いです。

git diff コマンドでコミット間の差分を抽出する場合、git diff 変更前コミット 変更後コミット という記述ルールがあるので、%PARAM1% と %PARAM2% を入れ替えて、git diff --name-only %PARAM2% %PARAM1% とするのが正しい記述となります。

正しいバッチファイルの中身

if "%2" EQU "" (
  set PARAM1=HEAD
  set PARAM2=%1
) else (
  set PARAM1=%1
  set PARAM2=%2
)

setlocal enabledelayedexpansion
set RET_DIR=
for /F "usebackq" %%i in (`git diff --name-only --diff-filter=ACMR %PARAM2% %PARAM1%`) do (
  set RET_DIR=!RET_DIR! "%%i"
)
set time=%time: =0%
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o archive_%TODAY%.zip

修正をしているだけでなく、少し改良を加えています。

--diff-filter=ACMR で「追加」「コピー」「修正」「リネーム」したファイルのみ抽出。

zipファイル名に「日付_時間」が入るよう調整。
「archive_20200520_001122.zip」というファイル名で保存されます。

SourceTreeの使い方、カスタム操作の使い方はこちらのサイトをご参考くださいね。

SourceTreeの使い方 | コミット間の差分ファイルの抽出 (カスタム操作を使う方法)

コメントを残す

メールアドレスが公開されることはありません。

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

このサイトの管理者

ナオユ

Wordpress初心者向けにカスタマイズ方法やWEB制作のノウハウをポロッとまとめています。広告代理店→WEB制作会社→リモート勤務になり在宅ワークしながらアフィリエイトなど副業に挑戦中|子ども大好き新米パパ@H29男児|フラット35で実家を建て直し親と同居|仮想通貨投資(絶賛含み損w)