for /f "delims=" %%A in ('git diff --name-only HEAD "HEAD^"') do set DIFF_LIST=%%A
git archive --format=zip HEAD %DIFF_LIST% -o archive.zip
下記問題があり、解決方法を頂けますでしょうか?
・作成ファイルがひとつしか存在しないため、差分の全てのファイルが取得されるように出来るか
・最新ではなく、カスタム操作として指定したバージョンのみの差分ファイルを取得できるようにしてほしい。
SourceTreeをインストールしていないので実物でのテストはしていませんが、単なるバッチファイルなのでおそらく大丈夫だと思います。
>作成ファイルがひとつしか存在しないため、差分の全てのファイルが取得されるように出来るか
結局DIFF_LISTにセットされるのが最後のファイル名だけになっているので、追記していく形にしなければなりません。
環境変数やコマンドラインでの文字数制限が8000文字程度なので、あまりにファイルが多すぎると破綻します。あと、パス名にスペースが入っていない前提になってます。
@echo off setlocal ENABLEDELAYEDEXPANSION set DIFF_LIST= for /f %%A in ('git diff --name-only HEAD "HEAD^"') do set DIFF_LIST=!DIFF_LIST! %%A git archive --format=zip HEAD -o archive.zip %DIFF_LIST% endlocal
>最新ではなく、カスタム操作として指定したバージョンのみの差分ファイルを取得できるようにしてほしい。
http://blog.44uk.net/2013/08/13/git-export-tools-for-sourcetre/
を参考にしました。
実行するスクリプトに下記のバッチファイル、パラメータに $SHA を入れればいけるはずです。
@echo off setlocal ENABLEDELAYEDEXPANSION set DIFF_LIST= set NEW_SHA=%1 set OLD_SHA=%2 if "%OLD_SHA%"=="" set OLD_SHA=%NEW_SHA%^^ for /f %%A in ('git diff --name-only "%OLD_SHA%".."%NEW_SHA%"') do set DIFF_LIST=!DIFF_LIST! %%A git archive --format=zip HEAD -o archive.zip %DIFF_LIST% endlocal
ありがとうございました!
2014/06/01 21:29:09出来ました。