windowsのpowershell上でgit archiveによる差分ファイルの抽出をしたけど
日本語を含むファイルがzipに含まれてなかったので別案を考えてみた。
実行したのは以下のコマンド
ps1:
git archive --format=zip head $(git diff head head~1 --name-only) -o update_files.zip
7zを使用すると目的が達成できる
#一つ前のコミットから差分ファイルの一覧を抽出する場合
$diff = "HEAD~1"
#日本語ファイル名の文字化けを防ぐため一時的にコンソールをutf-8に変更
$enc = [console]::OutputEncoding;
[console]::OutputEncoding = [text.encoding]::utf8
$targets = invoke-expression "git diff --name-only $diff | % -begin {`$script:a = `"`";} -proc {`$script:a += `"'`" + `$_ + `"' `" } -end {`$script:a}";
[console]::OutputEncoding = $enc;
#ファイルの圧縮を実行
invoke-expression "``7z a update_files.zip $targets"
注意点としては、現在のワークツリーが圧縮されるので任意のコミット間の差分抽出にはならない。
面倒だけどgit checkoutするなりしなければならないが目的は達成できる。