subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

Gitとは?

2021/5/5:更新


Gitとは、分散型バージョン管理システムのこと。

簡単に言うと、ファイルのバージョンを管理する仕組みです。

では、「分散型」とはどういう意味か?

Wiki先生によると、

各ユーザのワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークにアクセスできないなどの理由で中心リポジトリにアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である。

だそうだ。

1ヵ所で集中してやるのではなく、各々のワークスペース上でできるよってことでしょうかね。

私が昔いた組込み業界では、バージョン管理ツールとしては、VSS・Integrity・Subversionなどを使っていました。でも、これらのツールは、ローカルリポジトリという概念ではなかったから、Gitのような分散型ではなくて、集中型に属する。

だから、Gitは使ったことがなくて、いまいち概念が理解できていないので、ここでまとめておく。


GitはCUI

GitはCUI(Character-based User Interface)で操作する。GUIで操作するIntegrityやSubversionとは違い、文字列(コマンド)でコントロールする。

Character User Interface、Console User Interfaceとも言う。

ただし、SourceTreeなどのツールを使えば、GUI上で分かりやすく操作することも可能。

初めての人は、わかばちゃんの本などでGitの概要をGUIで操作してみて理解してからコマンドに移ったほうがわかりやすいかもしれない。


Gitでよく出てくる用語

  • リポジトリ:「貯蔵庫」を指す意味の通り、データやプログラムの情報が入ったデータベース
  • push:ローカルリポジトリのファイルを、リモートリポジトリに送信して保存する
  • pull:リモートリポジトリに保存されているファイルの中で、ローカルリポジトリとの差分をダウンロードして更新する
  • clone:リモートリポジトリのファイルをそのまま全て自分のローカルリポジトリにダウンロードして保存する
  • branch:メインのストリームをいったん分岐させる(分岐に対して変更を入れていくことになる)
  • merge:ブランチした後に入れた変更をメインのストリームに反映させる
  • fetch:リモートリポジトリからファイルの最新情報を取得する※ローカルリポジトリの内容は更新されない
  • commit:変更内容をローカルリポジトリに記録する

Gitについての詳細はGitのドキュメント(ProGit)を参照。


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

IntegrityやSubversionはいわゆる「集中型」のバージョン管理システムなので、Gitのようにローカルリポジトリというものが存在せず、サーバーにインストールされたリモートリポジトリのみでバージョン管理を行っている。

一方で、「分散型」のGitにはローカルリポジトリというものが存在していて、自分のワークスペースとして自由に編集ができる。

自分の手元で編集して、ローカルリポジトリにcommitしたファイルは、pushコマンドを使ってリモートリポジトリに反映させることができる。


ワークスペース(ワークツリー)とインデックス

Gitには、ローカルリポジトリとリモートリポジトリがあると書いたが、このローカルリポジトリが実際に自分が作業しているワークスペースかというと、そうではない。

Gitでは、ワークスペースとローカルリポジトリの間に、「インデックス」というステージが存在する。
※自分が実際に変更する場所(ワークスペース)のことを、ワークツリーとも言う。

ワークスペースで実際に変更したファイルを、「git add」コマンドでインデックスに登録してから、「git commit」コマンドでローカルリポジトリに登録する。


図で書くと、下記のようなイメージになる。