12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git archive で日本語が含まれている場合の pathspec のエラー

Posted at

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 が作成されました。

できたと思ったのですが、日本語ファイルが含まれていませんでした…

参考

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?