パスに空白を含むファイルをgit archiveする

My Projcet/hoge

みたいなファイルがあるとき、git archiveするには

$ git archive --format=zip master My\ Project/hoge -o diff.zip

とすれば良い。

Gitで特定コミットのファイルだけをzipで納品するコマンド - atskimura-memo
をみて、自分でも差分のみをarchiveしようと考えて、

$ git archive --format=zip master `git diff --name-only HEAD..HEAD~` -o diff.zip

としてみたところ

fatal: pathspec 'My' did not match any files

と怒られた。

$ git diff --name-only HEAD..HEAD~

を実行してみると

My Project/hoge

と表示される。
スペースの前にバックスラッシュが必要なのか?
というわけでsedしてみる

$ git diff --name-only HEAD..HEAD~ | sed -e "s/ /\\\\ /g"
My\ Project/hoge

いいんじゃないかな…

$ git archive --format=zip master `git diff --name-only HEAD..HEAD~ | sed -e "s/ /\\\\ /g"` -o diff.zip
fatal: pathspec 'My' did not match any files

何故じゃ!!
分かる人がいれば教えてください。