Gitとは何か
Gitというシステム
Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム
と説明されています。
簡潔に説明されていますが、よくわからないと思います。詳しく説明していきます。
まず結論です。Git は「テキストファイルの更新履歴を記録、管理するアプリケーション」です。これだけです。これを達成するために様々な機能を Git は持ち合わせています。この説明で不足していると思う方は以下の説明を読んでください。十分だと思う方は次節「ファイル共有サービスではなく Git を使う理由」をご覧ください。
前半部分を紐解きます。「プログラムのソースコードなどの変更履歴を記録・追跡するため」の部分です。この部分で大事なのは「変更履歴の記録・追跡」です。Git の主な機能は テキストファイルの変更履歴を記録し、過去の状態に戻したり分岐したりすることです。
ファイルのバックアップを取ったり違うバージョンを作成したりするとき、以下のようになったことがある人は多いのではないでしょうか?
https://gyazo.com/63715e1422aa727ebbc570a401a98e17
Git はある状態(コミット)を管理しているため、1つのファイル名で複数のバージョンが管理できるのです(今は想像できないかもしれませんが、実際に操作してみるとわかるかと思います)。そしてファイルのバージョンを管理するため、私達はコマンドを実行して変更履歴を保存したり過去のバージョンに戻したりします。
続いて後半部分の「分散型バージョン管理システム」についてです。「分散型」というところに注目しましょう。Git は リポジトリ (Repository) と呼ばれるワークスペース内でバージョンの管理が行われます (この説明はリポジトリを作成する (git init)で詳しくします)。リポジトリは各PCごとに作成・保持されます(ローカルリポジトリ)。 対して、GitHub, GitLab などをはじめとする Gitホスティングサービス で管理されるリポジトリをリモートリポジトリと呼びます。リモートリポジトリは1つのプロジェクトに対して基本的に1つです (フォークした場合や複数のホスティングサービスにリポジトリが存在する場合はリモートリポジトリが複数存在しますが、はじめはその考えで良いでしょう)。リモートリポジトリはすべてのローカルリポジトリの変更を統合・管理します。一方、ローカルリポジトリは実際に作業を行った変更履歴を保存します。これをリモートリポジトリにアップロード (push) したりダウンロード (pull, fetch) したりすることで、ファイルの共有・同期を行います。 これが Git が分散型と言われる理由です。
https://gyazo.com/cc97ee1a31f537da414d7b599c905f89
ファイル共有サービスではなく Git を使う理由
ファイルを共有するなら Google Drive のようなファイル共有サービスでもいいのではないか?と思う方もいらっしゃると思います。たしかに 2020 年現在、高機能のファイル共有サービスが存在しておりバージョン管理も可能です。それなのになぜ Git 使うと良いのでしょうか? 筆者は以下の3つが Git に優位性があると考えています。
ローカル環境(ネットがない環境)でもバージョン管理が実現できる
ファイルの中身ごとに差分が確認できる
バージョンに対し、説明をつけることができる
ローカル環境(ネットがない環境)でもバージョン管理が実現できる
Git は元々ファイルの共有機能はなく、ローカル環境でバージョン管理をするだけのアプリケーションでした。やがて時代が進み、インターネットを通じてファイルを共有する機能が拡張されました。つまりバージョン管理だけならネット環境を必須としません。ファイル共有サービスはアップロードしてやっとバージョン管理が実現するため、 Git のほうが優位にあると言えます。
ファイルの中身ごとに差分が確認できる
あなたがファイル共有サービスでファイルをアップロードするときどのようにしますか? PC に専用のアプリケーションをインストールしている方はファイルごとにアップロードされているかもしれません。しかしながら、複数のファイルを一気にアップロードするとき、zipのような圧縮ファイルをアップロードする方もいらっしゃると思います。このような形のアップロードではどのファイルが変更されたかわかりません。Git はファイルの中身の差分で管理するため、どのファイルのどの部分が変更されたかを確認することができます。
バージョンに対し、説明をつけることができる
ファイル共有サービスではファイルをアップロードすると自動的にバージョンが付与されます。この点は便利である一方、どのような変更を行ったかはひと目見ただけではわかりづらいことが多いです。Git ではあるバージョンに対し、説明をつけることができます。ほぼ必須で説明を求められるため、後で履歴を見たときに戻りたい場所を見つけやすいです。またファイル共有サービスではファイルごとにバージョンが決められますが、Git では複数のファイル変更を1つのバージョンとして管理ができるため、複数ファイルの管理が容易であると言えます。
Git と GitHub の違い
今までお話したように、Git はファイルのバージョン管理をするアプリケーションです。一方 GitHub は Git ホスティングサービスの 1つです。 Git ホスティングサービスというのは、Git のシステムを利用して複数人で同じプロジェクトを変更・共有できるようにした Webサービスです。Git ホスティングサービスは GitHub、GitLab や Bitbucket のように複数存在しますが、提供している機能はほぼ同じです。
名前は似ていますが、全く異なります。例えば「GitHub にアップロードしました」という表現は正しいですが、「Git にアップロードしました」という表現は間違いです。混同しないように注意しましょう。