ソースコードやドキュメントの変更を管理する際、「前の状態に戻したい」「どの部分を誰が編集したのか確認したい」と思ったことはありませんか?
そのような場面で役立つのが、Gitという「バージョン管理システム (VCS: Version Control System)」です。Gitはファイルの変更履歴を保存し、異なるバージョンを管理するツールで、世界中の開発者が利用しています。
この記事では『Git』について、以下の内容を分かりやすく解説します。
- Gitとは
- Gitの仕組み
- Gitで管理しているファイルがリモートリポジトリにアップロードされるまでの流れ
Gitとは
Gitは「バージョン管理システム 」であり、ファイルの変更履歴を保存し、異なるバージョンを管理できるツールです。
ソースコードや会議の議事録を編集する際、何度も修正が加えられますが、Gitを使えば、各修正の状態を「バージョン」として保存し、必要な時に過去のバージョンに戻ったり、変更内容を確認したりすることができます。
例えば、ソースコードを編集している際に「間違った編集をしても元に戻したい」「以前の編集内容を確認したい」と思うことがあるかもしれません。Gitを使えば、同じファイルで複数のバージョンを簡単に管理できるため、いつでも以前のバージョンに戻ることができます。
Gitの仕組み
Gitは、ファイルをリモートリポジトリと呼ばれる場所に保管し、チームメンバーや全世界のユーザーがその内容にアクセスできるシステムです。ローカル環境(自分のPC)でファイルを編集し、それをリモートリポジトリにアップロードすることで、他のメンバーと変更内容を共有できます。また、リモートリポジトリにあるファイルをローカル環境(自分のPC)にコピーすることもできます。
上図に示しているGitの概念を理解すれば、ある程度Gitを使いこなすことができると思います。まず、Gitの仕組みを理解する上で必要な用語について説明します。
- リモートリポジトリ
- リポジトリとは、ファイルやディレクトリ類の変更履歴を管理する場所です。
- その中でも、インターネット上で管理するリポジトリをリモートリポジトリといいます。
- インターネットに保管しているリポジトリなので、全世界のユーザーがアクセス可能で、チームメンバー同士の協力が容易になります。
- ローカルリポジトリ
- ローカル環境(自分のPC)で管理するリポジトリをローカルリポジトリといいます。
- ローカル環境で作業した内容をリモートリポジトリにアップロードすることで、チーム全体に変更内容を反映させることができます。
- インデックス
- インデックスは、ワークツリー(作業ディレクトリ)とリモートリポジトリの間に位置するエリアです。
- ローカルリポジトリにコミットする内容を一時的に保存します。
- インデックスには「ステージングエリア」という別名があります。
- ワークツリー
- ワークツリーは、実際にソースコードやファイルを作成・編集している作業ディレクトリを指します。
- ワークツリーでの編集内容は、その後インデックスを経てローカルリポジトリにコミットされ、リモートリポジトリにプッシュされます。
- ワークツリーは「ワーキングツリー」、「ワークディレクトリ」、「作業ディレクトリ」とも呼ばれています。
Gitで管理しているファイルがリモートリポジトリにアップロードされるまでの流れを以下に示します。
- ワークツリー
- ファイルを変更するとワークツリーに変更履歴が反映されます。
- インデックス
git add
を実行すると、ワークツリーからインデックスに変更履歴が反映されます。
- ローカルリポジトリ
git commit
を実行すると、インデックスからローカルリポジトリに変更履歴が反映されます。
- リモートリポジトリ
git push
を実行すると、ローカルリポジトリからリモートリポジトリに変更履歴が反映されます。
git fetch
はリモートリポジトリの変更をローカルリポジトリに反映するコマンドです。
git merge
はローカルリポジトリの変更をワークツリーに反映するコマンドです。例えば、git fetch
で取得したリモートリポジトリの変更を、現在のブランチにマージすることで、ワークツリーにも変更を反映します。
git pull
はこれらを組み合わせたコマンドで、リモートリポジトリの変更をワークツリーに反映するコマンドです。すなわち、git pull
はgit fetch
とgit merge
が合わさったものです。
本記事のまとめ
この記事では『Git』について、以下の内容を説明しました。
- Gitとは
- Gitの仕組み
- Gitで管理しているファイルがリモートリポジトリにアップロードされるまでの流れ
お読みいただきありがとうございました。