【IT用語】Gitのバージョン管理の仕組みを基本から丁寧に解説!

IT用語

Gitとは

Gitとは、コンピュータ上のファイルに発生した変更を記録し、履歴を管理してくれる分散型バージョン管理システムです。

複数人で同時に変更したり、それぞれの変更履歴を共有出来る機能があります。
バージョン管理については、バージョン管理とは?を参考にしてください。

バージョン管理システム
リンクをコピーしました

バージョン管理システムには、「集中型」と「分散型」の2種類あります。後述しますが、管理対象のファイルや変更の履歴などを保存する場所のことを「リポジトリ」と言います。

分散型と集中型の違い
リンクをコピーしました

集中型は、ネットワークに接続した状態で中央のリポジトリを複数人で共有します。

集中型のイメージ

一方で、分散型は、ネットワークに接続しなくても自分のパソコンにリポジトリを持つことが出来ます。Gitは、分散型のバージョン管理システムです。

分散型のイメージ

分散型のメリット
リンクをコピーしました

分散型は集中型と比べて手間の様に見えますが、下記の様なメリットがあります。

  • オフラインでも開発する事が出来る
  • 他の人のコードが影響を及ぼす事がない
  • リポジトリが分散されているので、復元しやすい

バージョン管理の流れ
リンクをコピーしました

Gitの分散型バージョン管理システムの全体の流れは、下記の様になります。

バージョン管理の流れ

  • リモートリポジトリ …専用サーバーに置いてあるリポジトリ
  • ローカルリポジトリ …自分のローカル(パソコン)に置くリポジトリ
  • インデックス …ローカルリポジトリにコミット(変更を記録)する前の準備場所
  • ワークツリー …Gitの管理下にある作業場所

これからは重要な箇所なので、順番に詳しく解説していきます。

「リモートリポジトリ」と「ローカルリポジトリ」
リンクをコピーしました

リポジトリとは、ファイルの変更を記録する場所です。
リポジトリには、「リモートリポジトリ」と「ローカルリポジトリ」があります。リポジトリを2つに分けると、自分の作業を手元のローカルで行う事が出来ます。

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

  • リモートリポジトリ …専用サーバーに置いてあるリポジトリ
  • ローカルリポジトリ…自分のローカル(パソコン)に置くリポジトリ

作業したものをアップロードする場合は、「ローカルリポジトリからリモートリポジトリにpush(プッシュ)」します。

最新のリモートリポジトリの情報を取得する場合は、「リモートリポジトリからローカルリポジトリにpull(プル)」します。他の人が作業した内容も含まれます。

コミット
リンクをコピーしました

コミットとは、リポジトリに対してファイルの変更や修正を記録する操作のことです。

コミットを実行すると、現在からコミットされた差分の変更がリポジトリ内に記録されます。リポジトリ内では、コミット単位で時系列の順番に格納されます。

これにより、過去の変更履歴を辿れる様になります。

ワークツリーとインデックス
リンクをコピーしました

ワークツリーとインデックスは、それぞれGit管理下に配置される作業場所とリポジトリにコミットする為の前の準備場所です。

ワークツリーとインデックス

  • インデックス…ローカルリポジトリにコミット(変更を記録)する前の準備場所
  • ワークツリー…Gitの管理下にある作業場所

ワークツリーは、実際に変更や修正を行った最新のファイルがあります。その変更したファイルの状態をインデックスにadd(登録)します。変更されていないファイルは、インデックスにaddしても反映されません。

インデックスが必要な理由とは?
リンクをコピーしました

ワークツリーでファイル変更したものをそのままローカルリポジトリにコミットすれば良さそうですが、なぜインデックスが必要なのでしょうか?

それは、インデックスを間に挟むことによって、ワークツリーにある全てのファイルではなく、変更したファイルや一部のみをコミットすることが出来るからです。

そして、インデックスで設定した内容がリポジトリにコミットされるので、コミットする前にワークツリーからインデックスに対して、add(登録)が必要になるのです。

Gitのインストール
リンクをコピーしました

Gitは、こちらの公式サイトからインストールします。

1.公式サイトにアクセスして「Downloads」を選択します。

公式サイト

2.赤枠の中から自分の環境に合うものを選んでダウンロードします。
ダウンロードが開始されない場合は、「click here to download manually.」のリンクを選択します。

公式サイトのダウンロード

3.「git-2.2.1-intel-universal-mavericks.dmg」というファイルがダウンロードされます。下記の様に箱のアイコンをクリックします。
ファイルがダウンロード

インストール画面が開くので指示にしたがってインストールを進めて下さい。インストールされたか確認するには、「ターミナル」を開いて下記のコマンドで確かめる事が出来ます。

ターミナル | インストールされているか確認
1
$ git --version

コマンド操作
リンクをコピーしました

「バージョン管理の全体図」にあるpush, commit, addなどをコマンドで操作する方法を解説していきます。

バージョン管理の全体図

add(登録する)
リンクをコピーしました

ワークツリーで変更・更新したファイルをインデックスに登録します。
これは、「addコマンド」を使います。

git操作addコマンド

ターミナル | 任意のファイルをインデックスに登録する
1
$ git add <登録したいファイル名>

<登録したいファイル名>を.(ドット)にすると、変更された全てのファイルがインデックスに登録されます。

ターミナル | 変更した全てのファイルをインデックスに登録する
1
$ git add .

「add」と「.」の間にはスペースが入るので注意しましょう!

commit(記録する)
リンクをコピーしました

インデックスに登録された設定をローカルリポジトリに記録するには、「commitコマンド」を使用します。

git操作commitコマンド

オプション「-m」は、コミット内容のメッセージを入れます。これによって、このコミットが何を変更したか分かりやすくなります。

ターミナル | コミットする
1
$ git commit -m "コミット内容"

ワークツリーで変更したファイルをインデックスに登録する際に「addコマンド」を使っていましたが、インデックス登録とコミットを下記のコマンドで同時に実行する事が出来ます。

ターミナル | addとcommitを同時に実行する
1
$ git commit -am "コミット内容"

push(リモートリポジトリに反映させる)
リンクをコピーしました

ローカルリポジトリに記録された変更履歴をリモートリポジトリに反映させる為に「pushコマンド」を使います。

git操作pushコマンド

ターミナル | リモートリポジトリ に反映させる
1
$ git push origin master

origin masterは、今はおまじないみたいなものと思っていてください。後述ブランチの箇所で解説させて頂きます。

pull(最新のリポジトリの情報を取り込む)
リンクをコピーしました

リモートリポジトリからローカルリポジトリに最新の情報を取り込むには、「pullコマンド」を使います。

git操作pullコマンド

ターミナル | 最新のリポジトリの情報を取り込む
1
$ git pull origin master

githubの使い方
リンクをコピーしました

githubとは、Gitのバージョン管理システムを利用したWebサービスの事です。
実際に開発する時は、この様なGitの仕組みを使ったWebサービスを利用する事が多いので使い方をマスターしましょう。(別記事で解説させて頂きます。)

まとめ

  • Gitとは、コンピュータ上のファイルに発生した変更を記録し、履歴を管理してくれるバージョン管理システムです
  • バージョン管理システムには、「集中型」と「分散型」の2種類あり、Gitは「分散型」です。
  • ローカルにリポジトリを置く事が出来るので、自分のパソコン内で全ての操作を行う事が出来る