今日やったこと

  • Gitリポジトリを圧縮して共有する方法について整理した
  • ソースコード一式だけを共有する場合と、Git履歴込みで共有する場合の違いを確認した
  • ソースコード一式を zip や tar で出力できる git archive について確認した
  • Git履歴込みでリポジトリを1ファイルにまとめられる git bundle について確認した
  • git archivegit bundle の使い分けを整理した

学んだこと

  • git archive は、指定したコミット時点のソースコード一式をアーカイブとして出力するコマンド
  • git archive で作成した zip や tar には、基本的に .git ディレクトリやGit履歴は含まれない
  • ソースコードだけを共有したい場合は、通常の zip よりも git archive を使うと、Git管理対象のファイルだけをきれいに出力しやすい
  • git bundle は、Gitのコミット履歴・ブランチ・タグなどを1つのファイルにまとめるためのコマンド
  • git bundle で作成した .bundle ファイルは、あとから git clone してリポジトリとして復元できる
  • depth 1 の clone は履歴を一部だけ持つ状態になるため、ソースコード共有としても履歴込み保存としても中途半端になりやすい

コマンド

ソースコード一式を zip で出力する。

git archive --format=zip --output repo_2026Q1.zip HEAD

ソースコード一式を tar で出力する。

git archive --format=tar --output repo_2026Q1.tar HEAD

ソースコード一式を tar.gz で出力する。

git archive --format=tar.gz --output repo_2026Q1.tar.gz HEAD

Git履歴込みでリポジトリを bundle にまとめる。

git fetch --all --tags --prune
git bundle create repo_2026Q1_all.bundle --all

bundle ファイルが正しく作成されているか確認する。

git bundle verify repo_2026Q1_all.bundle

bundle に含まれるブランチやタグを確認する。

git bundle list-heads repo_2026Q1_all.bundle

bundle ファイルからリポジトリを復元する。

git clone repo_2026Q1_all.bundle repo_restored
  • HEAD は、どの時点のファイル一式をアーカイブするかを指定している
  • 現在のブランチの最新コミットを対象にする場合は HEAD を指定する
  • main、タグ名、コミットハッシュ、HEAD~1 なども指定できる

使い分け

やりたいこと 使うコマンド 拡張子 Git履歴
ソースコード一式を共有したい git archive .zip, .tar, .tar.gz 含まない
Git履歴込みで保存・共有したい git bundle .bundle 含む
とりあえずディレクトリを圧縮したい 通常の zip / tar .zip, .tar.gz .git を含めるか次第

あいまいなこと

  • Git LFS を使っている場合に、git bundle だけで大きなファイルの実体まで含められるのか
  • submodule を使っている場合に、親リポジトリの bundle だけで十分なのか

次にやること

  • Git LFS や submodule を使っているリポジトリでの扱いも確認する