みなさんこんにちは。hagixです。
前回の記事ではGitの詳細を説明する前に、
そもそも、バージョン管理システムとは何か、バージョン管理システムの歴史についてお話ししました。
今回はいよいよGitの仕組みについてお話ししたいと思います。
Gitのコンポーネント
まずはGitを構成するコンポーネントについてお話しします。
Gitは、GitサーバとGitクライアントの2つのコンポーネントから成り立ちます。
Gitサーバとは
GitサーバはGitのリモートリポジトリが格納されています。
GitHubやGitLabといったサービスを使ってホスティングするほか、自分たちでGitサーバを構築することもできます。
Gitクライアントとは
Gitクライアントは、Gitサーバ上のリポジトリをローカルにコピーしたり、コピーしたローカルリポジトリにさまざまな操作を加えることができます。
CUI/GUI両方が用意されており、GUIはCUIのコマンドラインを複数同時に実行するためのコマンドが用意されていたりします。
リポジトリとは
ここで、リポジトリ、という言葉が出てきました。
Gitを理解する上で非常に重要な概念なので、後ほど詳細は説明いたしますが、
ここでは、すべての変更履歴が格納された箱のようなもの、と、いったん考えてください。
ここで重要なのは、Gitサーバに存在するリモートのリポジトリ(全ての変更履歴)を、Gitクライアントを使ってローカルにコピーし、ローカルリポジトリとして扱うということです。
CVSやSVNは中央のサーバを一つ立てて、そこに全ての変更点をコミットしていきました。
一方、Gitは、リモートのリポジトリをローカルにコピーし、コピーしたローカルリポジトリにさまざまな変更を加えたものを、リモートリポジトリにPushしたり、
また、ローカルに新しい空のリポジトリを作成し、リモートリポジトリにPushする、という使い方も可能となります。
これにより、中央との接続がない状態でも作業ができるなど、さまざまな利点を得ることが可能となります。
ローカルリポジトリの構成
それでは、改めてリポジトリとは何かを見ていきましょう。
端末上で実際にGitのローカルリポジトリを作ってみたいと思います。
端末上のターミナルを開き、WORK_DIRECTORYを作った後、そこに移動してさらにindex.htmlを作ってください。
mkdir WORK_DIRECTORY
cd WORK_DIRECTORY
echo "hello,Git" > index.html
続いて、git --versionと入力してみてください。
下記のようにバージョンが表示されましたか?
MacBook-Air .git % git --version
git version 2.39.3 (Apple Git-146)
私の手元の端末はMacBookAirのため、Appleが用意したGitが入っておりました。
もし、入っていない場合は、下記のURLを参考に、Gitをインストールしてみてください。
Gitをインストールしましたら、続いて下記のコマンドを実行してください。
git init
その後、下記のコマンドを実行すると、.gitというこれまでみたことのないディレクトリができているはずです。
MacBook-Air WORK_DIRECTORY % ls -ltra
total 0
drwxr-xr-x 3 test staff 96 7 14 20:32 .
drwxr-xr-x 9 test staff 288 7 14 20:32 .git
drwxr-x---+ 35 test staff 1120 7 14 20:33 ..
-rw-r--r-- 1 test staff 11 7 14 20:54 index.html
ここで表示される.gitこそが、リポジトリの実態です。
ここまでのお話で、バージョン管理システムはさまざまな変更履歴を管理するシステムとお話ししました。
変更履歴を管理するためには、管理する場所が必要です。
そして、Gitでは、その変更を管理する場所が、今回作成した.gitと場所なのです。
ここで作ったWORK_DIRECOTRYとその中に存在するindex.html、.git全てを合わせてリポジトリとして認識します。
また、Gitは、.gitが置かれているディレクトリに存在するファイルやディレクトリをワーキングツリーと呼び、Git配下にある資産として認識します。
今回の例で言いますと、index.htmlをワーキングツリーと呼びます。
ワーキングツリーが存在しない、つまり、.gitのみのリポジトリをベアリポジトリ、ワーキングツリーが存在するリポジトリを、ノンベアリポジトリと呼びます。
まとめ
この記事では、Gitの概要についてお話ししました。
Gitを構成するコンポーネントは、GitサーバとGitクライアントの2種類があります。
GitクライアントはさらにGUIとCUIの2つが存在します。
さらに、Gitを理解する上で基本的な概念となるリポジトリについてお話ししました。
リポジトリとは、gitにおいて変更履歴を管理する場所であり、git initによって作られる.gitそのもののことです。
また、.gitと同列にあるディレクトリやファイルをワーキングツリーと呼び、GitはこれらのファイルをGit管理下にあるコンテンツとしてみなします。
Gitサーバはリモートリポジトリを、Gitクラインとはローカルリポジトリをそれぞれ持っており、基本的にローカルリポジトリに変更を加えたものを、リモートリポジトリに反映させるという方法をとっていくことになります。
次の記事では、ワーキングツリーに変更を加えてリポジトリに反映させます。
そして、.gitの中身を見ていくことで、さらに、Gitの詳細についてお話ししていきたいと思います。