WindowsのSourceTreeで下記のbatをカスタムアクションで、差分ファイルを取得できるようになったのですが、


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


下記問題があり、解決方法を頂けますでしょうか?

・作成ファイルがひとつしか存在しないため、差分の全てのファイルが取得されるように出来るか
・最新ではなく、カスタム操作として指定したバージョンのみの差分ファイルを取得できるようにしてほしい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/06/01 21:29:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:siachan No.1

回答回数91ベストアンサー獲得回数23

ポイント200pt

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
id:makocan

ありがとうございました!
出来ました。

2014/06/01 21:29:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません