git archiveとは?Gitで成果物をzipやtarでアーカイブする方法を解説!

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 main

zipとの違いは、出力形式だけです。

ブランチを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を使ってみてください。「配布用コードを作る」作業がシンプルになります。

お読みいただきありがとうございました。

スポンサーリンク