gitで名前に日本語を含むファイルをエクスポートする
業務の都合でgitからファイルをエクスポートする必要があって調べたところ、git archiveを使用すればよいということがわかりましたが、git archive でzipを指定したとき、名前に日本語を含むファイルがあると文字化けすることもわかりました。
少しググると tarで一度出力したあとにzipに圧縮し直すという手順がありましたので、紹介します。
具体的には以下のとおりです。
gitでファイルをエクスポートする手順
日本語を含むファイル名をgit archiveすると文字化けするため、tarでarchiveしてzipに圧縮し直すという手段を取ります。前提としてファイルの圧縮に7-zipを使用します。
なお圧縮ソフトはコマンドライン対応でtarを使えるならなんでもいいと思います*1。
その1:git bush を起動します。
SourceTreeを使っているならTerminalボタンクリックで起動します。
その2:git archive コマンドを使用してエクスポートします。
$ git archive {コミットID} --prefix={出力フォルダ} --output={圧縮ファイル名}.tar
作業しているブランチの先頭ならHEADを指定します。また特定のフォルダのみ出力したい場合は:(コロン)をつけて指定します。 例えば root/srcフォルダのみエクスポートしたい場合は git archive HEAD:src --prefix ~ のようにします。
prefixは特定のフォルダに出力したい場合は指定します。outputは圧縮ファイルを指定します。
その3:tarで圧縮したファイルを解凍します。
$ "C:\Program Files\Git\usr\bin\tar.exe" -xvf {圧縮ファイル名}.tar
圧縮対象のファイルがあるディレクトリで作業すると元のファイルを上書きするので、カレントディレクトリを移動するか解凍先を指定します。解凍先を指定する場合は、-Cオプションを指定します。
例)tar -xvf {圧縮ファイル名}.tar -C {解凍先フォルダ名}/
※最後のスラッシュがないと悲惨なことになります
その4:7-zipを使ってzipに圧縮し直します。
$ "C:\Program Files\7-Zip\7z.exe" a {圧縮ファイル名}.zip ./{解凍先フォルダ}
lhazなど、コマンドラインで実行できる圧縮ソフトならなんでもいいと思います。
バッチファイルでまとめておくと便利
コマンドライン引数を取るバッチファイルなどにしておくと便利です。
git archive %1 --prefix=src/ --output=%2.tar mkdir %2 "C:\Program Files\Git\usr\bin\tar.exe" -xvf %2.tar -C %2/ "C:\Program Files\7-Zip\7z.exe" a %2.zip ./%2 rm %2.tar rmdir /s /q %2
こんな感じ(対象のコミットと圧縮ファイル名を指定)
*1:lhazなど