ことれいのもり

Gitリポジトリの仕組みをやさしく解説 ローカルとリモートの違い

はじめに

この記事は、Gitをなんとなく使っている私「ことれい」が、Gitを学び直した過程で知ったことをまとめたものです。

連続記事となっており、前回は「Gitの保存の仕組み」について解説しました。

前回: Git保存の仕組みをやさしく解説 スナップショットとコミット


今回の内容は、ローカルリポジトリとリモートリポジトリについてです。

各用語の意味から、どのようにデータをやりとりしているかを詳しく見ていきます。

イラスト多めで、イメージで理解できるようにしたのでぜひ読んでください。

リポジトリとは?

リポジトリ


Gitを使う上でよく出てくるリポジトリという言葉。

リポジトリとは、変更履歴を保管する場所(データベース)のことです。


例えば、あなたがチームでRPGゲームを作っているとします。

ゲームの中にはキャラクター・マップ・アイテムなど、様々な要素があります。


  • Aさんが「キャラクターのレベルアップ機能」を追加した(11月23日 12:00)
  • Bさんが「アイテムを合成する機能」を修正した(11月23日 12:15)
  • Cさんが「マップ1」を削除した(11月23日 14:00)


このように、誰が・いつ・どんな内容を変更したかを記録できるものがリポジトリです。


リポジトリには、大きく分けて次の二種類があります。

  • ローカルリポジトリ(自分のPC上に保存)
  • リモートリポジトリ(GitHubなどのオンライン上)


それぞれについて、詳しく見ていきましょう。

ローカルリポジトリ

ローカルリポジトリ


ローカルリポジトリとは、自分のPC上で変更履歴を保管する場所のことです。


  • ローカル: 自分のPC
  • リポジトリ: 変更履歴を保管する場所


ファイルを変更すると、その内容はスナップショットとしてローカルリポジトリに記録されます。

しかし、この変更は自分のPCの中だけに保存されている状態です。

チームメンバーに反映するには、オンライン上(GitHubなど)のリモートリポジトリへアップロードする必要があります。


先ほどのゲームの例に当てはめて考えてみましょう。


ローカルリポジトリの変更の影響


Aさん・Bさん・Cさんの三人はローカルリポジトリに以下の変更を加えました。


  • Aさんが「キャラクターのレベルアップ機能」を追加した(11月23日 12:00)
  • Bさんが「アイテムを合成する機能」を修正した(11月23日 12:15)
  • Cさんが「マップ1」を削除した(11月23日 14:00)


これらの変更は、それぞれ各メンバーのローカルリポジトリにだけ記録されています。

つまり、自分のPC上にしか存在していません。


Aさんが追加した「キャラクターのレベルアップ機能」は、AさんのPCにしか存在しません。

同じようにBさんが修正した「アイテムを合成する機能」は、BさんのPCにしか存在しません。

ローカルリポジトリはあくまでも、自分のPC上での変更履歴の話です。

ローカルリポジトリの内部構造

ここからは、ローカルリポジトリがどのような流れで変更履歴を記録しているかを詳しく見ていきましょう。

ローカルリポジトリは以下の3つの要素で構成されています。


ローカルリポジトリの内部構造


  • ワークツリー:ファイルを変更する作業場所(自分のPC)
  • ステージ:コミットするファイルを選ぶ場所(中間の一時置き場)
  • ローカルリポジトリ:スナップショットの保管場所

①ワークツリー

ワークツリーとは、自分のPCにあるファイルを変更する作業場所のことです。

VSCodeなどのエディターでコードを書く領域などがワークツリーにあたります。


まずはこのワークツリーでファイルを変更して、次のステップに進みます。

②ステージでコミットするファイルを選ぶ

ステージとは、コミットするファイルを一時的に集めておく場所です。

ここで、コミット対象を「選ぶ」工程が入ります。


「全部をコミットすればいいのでは?」と思う人もいるかもしれません。

しかし、開発をしているとコミットしたくないファイルが存在します。


  • パスワードが書かれた設定ファイル
  • 個人のメモ
  • デバッグ用の一時的なファイル


このような物までコミットすると、情報漏洩につながる可能性があります。

そのため、どのファイルを記録(コミット)するか?を選別するために、ステージという工程が必要になるのです。

③ローカルリポジトリに記録する

ローカルリポジトリはここまで話してきた、変更履歴の保管場所です。

ステージに追加されたファイルのみが、スナップショットとしてローカルリポジトリに記録されます。


この3つのステップを経て、ローカルリポジトリへ変更履歴が記録されます。


最初は少し複雑に感じるかもしれませんが、

ワークツリーでファイル変更→ステージでコミット対象を選択→ローカルリポジトリに保存

という流れを図でイメージしておくだけでも十分です!

リモートリポジトリ

リモートリポジトリ


リモートリポジトリとは、オンライン上での変更履歴の保管場所です。

GitHubやBacklogなどが有名です。


一番の特徴は、複数人のファイルの変更履歴をまとめて管理できる点です。

ローカルリポジトリはあくまで自分のPCの変更履歴だけを扱ってきました。

しかし、リモートリポジトリは複数人の変更履歴を保存できます。


この記事の最初に紹介した「Aさん・Bさん・Cさんの変更履歴をまとめたリポジトリの図」は、まさにリモートリポジトリのことです。

まとめ:ローカルリポジトリとリモートリポジトリ

ローカルリポジトリとリモートリポジトリの関係をイラストでまとめてみましょう。

このイラストだけ頭に焼き付けておけばバッチリです!


ローカルリポジトリとリモートリポジトリ

おわりに

今回大事なポイントは以下の2つです。


  • ローカルリポジトリ: 自分のPC上で変更履歴を保管する場所

    1. ワークツリーでファイル変更

    2. ステージでコミットするファイルを選択

    3. リポジトリに変更を記録

  • リモートリポジトリ: 複数人の変更履歴をまとめて管理できるオンライン上の保管場所


次回はGitのコマンドの説明に入っていきます!

ただ意味を羅列するだけでなく、イラストでイメージしながら理解できるようにするので続けてご覧ください。

次回: