OS X 10.9.5
問題点
git で日本語(マルチバイト)が含まれている場合に
git archive --format=zip head `git diff head head~10 --name-only` -o archive.zip
のようなコマンドで差分抽出を行おうとすると、履歴の中に日本語が含まれていると以下のようなエラーがでます。
fatal: pathspec '"\357\275\222.png"' did not match any files
この場合は、全角の r が含まれている為エラーが出ているようです。
対処方法
手動抽出
これは……やめましょう
エスケープをやめる
問題は diff の出力がエスケープされていることのようなので、以下のコマンドでエスケープを無効にしてしまいます。
これは現在の git のみですが、全てに適用が必要であれば --global をつけるといいかと思います。
git config --bool core.quotepath false
これで先のコマンドが正常に行える用になりました。
git archive --format=zip head `git diff head head~10 --name-only` -o archive.zip
NG
git diff の出力を改変
git diff の出力が
"\357\275\222.png"
となっているので、これを sed で r へ置換するとうまくいくと思ったのですが、ファイルが見つからないというエラーが出ました……
git archive --format=zip HEAD `git diff --name-only head head~10 | sed -e 's/\\\\357\\\\275\\\\222/r/g'` -o archive.zip
zip コマンド
少し検証してみると、git diff の出力は問題なく、git archive でのマルチバイトの扱いに問題があるような挙動でした。
なので git archive ではなく zip コマンドを利用して差分抽出してみようと思います。
zip -r archive.zip `git diff head head~10 --name-only`
これでカレントディレクトリに archive.zip が作成されました。
できたと思ったのですが、日本語ファイルが含まれていませんでした…
参考