Git学習まとめ:Bareリポジトリとコマンドの流れ
どうも、拓田です。
しばらく現場から遠ざかっていたんですが、戻ることになったので勉強しなおしています。
GitHubを使っていきますが、用語は抑えられているものの、詳しい構造の事を忘れていており、
学習を進めていく中でBareリポジトリの事がいまいち理解できていなかったので、
備忘のため、まとめました。
✅Bareリポジトリって正直いまいちわからん!
という方の理解の助けになれば幸いです。
1. リポジトリの種類
通常リポジトリ
- 実際の作業ファイル(ワークツリー)と履歴の両方を持つ
- 個人のPC上でコードを書いたり編集したりする場所
-
git addやgit commitなどの作業を行う場所
Bareリポジトリ
- ワークツリーもインデックスも持たない
- コードと履歴をGit独自の圧縮形式で保管している
- 複数人の作業者が全員 push/pull する中央管理サーバーとして機能する
- GitHubも内部的にはBareリポジトリで動いている
2. 通常リポジトリとBareリポジトリの内部構造の違い
通常リポジトリの内部構造
通常リポジトリ
├── ワークツリー ← 実際に編集するファイルが存在する場所
├── インデックス ← commitの準備をする場所(git addで登録)
└── リポジトリ本体 ← コードと履歴をGit圧縮形式で保管する場所
Bareリポジトリの内部構造
Bareリポジトリ
└── リポジトリ本体のみ ← ワークツリーもインデックスも存在しない
3. コードの保存について
Bareリポジトリにもコードは保存されている。
ただし通常リポジトリとは違い、人間が直接読めるファイル形式ではなく、Gitが圧縮・変換したオブジェクト形式で保存されている。
git checkout や git clone することで初めて通常のファイルとして取り出せる。
| 通常リポジトリ | Bareリポジトリ | |
|---|---|---|
| コード | 人間が読めるファイルとして存在 | Git圧縮形式で存在 |
| 履歴 | あり | あり |
| ワークツリー | あり | なし |
| インデックス | あり | なし |
| 直接編集 | できる | できない |
4. 作業の流れとコマンド
git add ファイル名 ワークツリー → インデックスに登録
git commit -m "メッセージ" インデックス → ローカルリポジトリ本体に記録
git push ローカルリポジトリ本体 → 中央管理サーバー(GitHub等)に転送
図で見る流れ
【ローカル(通常リポジトリ)】 【GitHub(Bareリポジトリ)】
ワークツリー
↓ git add
インデックス
↓ git commit
リポジトリ本体 ─── git push ─→ リポジトリ本体
5. まとめ
- Bareリポジトリは、複数人の変更を集める中央管理サーバー
- ワークツリーとインデックスがないのは、作業することを想定しておらず、コード管理に特化しているため
-
git addとgit Commitコマンドはローカルで完結し、git PushコマンドはBareリポジトリ(GitHub等)へ結果を転送する -
git add→git commit→git pushの流れが基本の作業サイクル