Gitを使っていると、次のような場面に出会うことはありませんか?
- 特定のブランチやタグの状態をzip形式で配布したい
.gitディレクトリは含めず、成果物だけを渡したい
そんなときに便利なのがgit archiveコマンドです。
この記事ではgit archiveコマンドについて、以下の内容をわかりやすく解説します。
git archiveとは?git archiveの使い方- ブランチを
zip形式でアーカイブする - ブランチを
tar形式でアーカイブする - ブランチを
tar.gz形式でアーカイブする(gzip圧縮) - 特定のタグを指定してアーカイブする
- 特定のコミットを指定してアーカイブする
- 特定のディレクトリだけをアーカイブする
--prefixオプションで展開先フォルダ名を指定する
- ブランチを
git archiveとは?
git archiveは、Gitリポジトリの内容をzipやtarといったアーカイブ形式で出力するためのコマンドです。
git archiveの主な特徴は次のとおりです。
.gitディレクトリ(Gitの履歴情報)は含まれない.gitignoreで無視しているファイルは含まれない- 指定したブランチ・タグ・コミット時点の状態をそのまま出力できる
- 成果物として配布しやすい形式(zip / tar)でまとめられる
つまりgit archiveは「ある時点のソースコード一式を、きれいに固めて配布するためのコマンド」と言えます。
開発用ではなく、提出・配布・リリース向けの用途に特化しているのがポイントです。たとえば、特定のタグ時点のコードをそのまま成果物として配布したいときにgit archiveが活躍します。
体験談
あるプロジェクトに携わっていた際、配布用のコードをまとめる必要がありました。そのときは.gitignoreで指定されたファイルを除外しながら、必要なファイルだけを手作業で仕分けしていました。
しかしこの作業は、
- 手間がかかる
- 時間がかかる
- ミスが起きやすい
という問題があり、非常に苦労しました。「もっと効率的な方法はないのか?」と調べていく中で、git archiveを使えば、このような配布作業を一瞬で行えることを知り、以降は配布用コードの作成に欠かせないコマンドになりました。
git archiveの使い方
ここでは、git archiveの基本的な使い方を順番に紹介します。
ブランチをzip形式でアーカイブする
まずは、最も基本的でよく使われる使い方です。指定したブランチの内容をzipファイルとして出力します。
git archive --format=zip --output=main.zip mainこのコマンドの意味は次の通りです。
--format=zip:zip形式で出力--output=main.zip:出力ファイル名main:対象となるブランチ名
このコマンドを実行すると、mainブランチの中身だけが.gitを含まずmain.zipにまとめられます。
成果物の配布や提出に、そのまま使える基本形です。
ブランチをtar形式でアーカイブする
zipの代わりに、tar形式で出力することもできます。
git archive --format=tar --output=main.tar mainzipとの違いは、出力形式だけです。
ブランチをtar.gz形式でアーカイブする(gzip圧縮)
git archiveは、標準出力に書き出すこともできます。これを利用すると、gzipと組み合わせて.tar.gz形式のアーカイブを作成できます。
git archive --format=tar main | gzip > main.tar.gzこのコマンドの意味は次の通りです。
git archive --format=tar main:mainブランチの内容をtar形式で標準出力に出力| gzip:出力されたtarをgzipで圧縮> main.tar.gz:圧縮結果をmain.tar.gzとして保存
この方法を使うと、
- Linux / サーバー環境でよく使われる
.tar.gzを作成できる - 1コマンドでアーカイブ+圧縮まで完了する
というメリットがあります。
特定のタグを指定してアーカイブする
リリース作業では、タグを指定して出力するのが定番です。
git archive --format=zip --output=v1.0.0.zip v1.0.0この場合、v1.0.0タグを付けた時点の状態だけをそのままzipにまとめます
特定のコミットを指定してアーカイブする
ブランチやタグだけでなく、コミットハッシュ(SHA)を直接指定することもできます。
git archive --format=zip --output=commit.zip a1b2c3d指定したコミット時点のスナップショットを出力できます。
特定のディレクトリだけをアーカイブする
リポジトリ全体ではなく、一部のディレクトリだけをアーカイブすることもできます。
git archive --format=zip --output=src.zip main src/この例では、mainブランチのsrc/ディレクトリだけをsrc.zipとして出力します。ドキュメントや一部モジュールだけを配布したい場合に役立ちます。
--prefixオプションで展開先フォルダ名を指定する
git archiveで作ったzip / tarを展開すると、ファイルがそのまま直下に展開されることがあります。このとき--prefixを使うと、アーカイブ内のパス先頭に任意のディレクトリ名を付けられます。
例えば、mainブランチをzipで出力し、展開するとproject/配下になるようにするためには、以下のコマンドを実行します。
git archive --format=zip --output=main.zip --prefix=project/ main本記事のまとめ
この記事では『git archiveコマンド』について説明しました。
git archiveは、特定時点のソースコードを.gitを含めずにアーカイブ化できる便利なコマンドです。ブランチ・タグ・コミットを指定して、zipやtar形式でそのまま配布できるため、提出・配布・リリース作業を効率化できます。
手作業でファイルをまとめていた方は、ぜひ一度git archiveを使ってみてください。「配布用コードを作る」作業がシンプルになります。
お読みいただきありがとうございました。