Gitリポジトリを圧縮して共有する方法を整理する
ソースコード一式をzipやtarで共有する git archive と、Git履歴込みで共有する git bundle の違いを整理する
今日やったこと
- Gitリポジトリを圧縮して共有する方法について整理した
- ソースコード一式だけを共有する場合と、Git履歴込みで共有する場合の違いを確認した
- ソースコード一式を zip や tar で出力できる
git archiveについて確認した - Git履歴込みでリポジトリを1ファイルにまとめられる
git bundleについて確認した git archiveとgit 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 を使っているリポジトリでの扱いも確認する