人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


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

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

●質問者: makocan
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● siachan
●200ポイント ベストアンサー

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

makocanさんのコメント
ありがとうございました! 出来ました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ