Gitでアーカイブ

windows7でmsysgitを使い日本語フォルダーやファイル名を使う試行錯誤録。msysgitのバージョンは1.7.10です。日本語化のために git config –global core.quotepath off をしています。

やりたい事

定期的に更新していくファイルだけを納品。ざっくり言うとHTMLファイルなんだけど、修正してリンクが正しいかをチェックするときには、変更していないファイルも必要で納品時には不要なファイル。この変更ファイルのみを抽出し、ZIPで圧縮して納品。ちなみに、高機能なHTMLエディターは使わないで、WZでベタにファイルをいじくっています。

そして試行錯誤

基本は、git archive -o update.zip HEAD $(git diff –name-only HEAD^)で最新リビジョンの変更ファイルだけをZIPに固める事が可能。
ちなみに特定のリビジョン間は、git archive -o update.zip TAG3 $(git diff –name-only TAG2..TAG3)でタグ名TAG2からTAG3で変更したファイルのみ集める事が可能。

さて、msysgitについてくるgzipなのか、git-archiveなのか、固めたファイルを解凍すると日本語は化けてしまう。UTF-8なのかと思ってlinuxにコピーして解凍してもNGだった。

グーグル君に問い合わせると7zipが行けそうな話が。7z.exeをGITのBINディレクトリーにコピーして、git archive –format=7z HEAD $(git diff –name-only HEAD^) | 7z.exe a update.zip日本語は大丈夫、でも私の環境ではリポジトリ管理の.gitと全てのファイルも固められてしまった。

試しにTARでアーカイブをしてみる。windows7の標準はTARを展開出来ないから、msysgitで展開、を・・・日本語が正しくなっている。TARで固め、展開して、windows標準でZIPに再び固めてたファイルを納品すればOK、って事になる。

まとめ、リポジトリ作業ディレクトリで

  • git archive –format=tar -o update.tar –prefix=html/ HEAD $(git diff –name-only HEAD^)で変更ファイルのみ抽出
  • tar -xvf update.tarで展開、htmlディレクトリ下に展開される
  • 展開したファイルをwindowsのエクスプローラでZIPに圧縮、って手順

付録

7zipを使う場合は、7z.exe a update.zip $(git diff –name-only HEAD^) で最新版(HEAD)の変更ファイルのみを抽出できます。
特定リビジョン間の変更ファイルのみ抽出は、git archive –format=tar -o update.tar TAG3 $(git diff –name-only TAG2..TAG3)、TAGはリビジョンハッシュコードでも可能

そして

納品するHTMLはディレクトリー名もファイル名も全て英数字、なのでTARで固めて展開してなんて回りくどい方法はいらない、素直にgit archive -o update.zip HEAD $(git diff –name-only HEAD^)で良いのだけど、日本語が使えないのが気になって調べてみました。

コメント

タイトルとURLをコピーしました