Gitの基本的な仕組み
Gitの仕組みについて学んでいきましょう。
まずはGitがどのようにデータを保存しているのかを学びます。
さっそく問題ですが、「Gitはスナップショットで保存」しているのでしょうか、それとも「Gitは差分で保存」しているのでしょうか。
どういうことかというと、Gitはファイルのバージョンを保存していますが、バージョンを保存する時にそのファイル全てをスナップショットとして保存しているのでしょうか、それとも、以前のバージョンから変更があった差分だけを保存しているのでしょうか。
Gitはスナップショットを記録しています。
「ファイルA」「ファイルB」「ファイルC」と3つのファイルがあったとすると、まずその3つのファイルを「バージョン1」として保存します。
丸々全てを保存しているのです。
次に「ファイルA」はそのままで「ファイルB」を「ファイルB1」へ、「ファイルC」を「ファイルC1」へ変更します。
その時の状態を「バージョン2」として保存します。そのときGitはどのようにデータを保存しているのでしょうか。
「ファイルB1」と「ファイルC1」は「ファイルB」と「ファイルC」との差分ではなく「ファイルB1」と「ファイルC1」をスナップショットとしてファイルをまるごと保存しています。
「ファイルA」に関しては変更されていないので、バージョン1で保存されたデータを使います。
このようにすることで、バージョン2では「ファイルA」「ファイルB1」「ファイルC1」のデータがまるごと保存されています。
次に「ファイルA」を「ファイルA1」へ、「ファイルC1」を「ファイルC2」へ変更します。
その状態を「バージョン3」として保存します。
この場合「ファイルA1」と「ファイルC2」は新しくまるごと保存して、「ファイルB1」は前回保存された分を使い回します。
それでバージョン3が記録されます。
このようにGitはスナップショットとしてデータを記録します。
ではなぜスナップショットとしてデータを記録するのでしょうか。
スナップショットとして記録することで、複数人で開発する時のスピードを上げることができます。
詳しくは別で解説しますが、複数人での開発の際、複数人が平行で開発できるようGitではブランチというものを切って、開発のバージョンを枝分かれさせて開発していきます。
このブランチでバージョンを枝分かれさせる際やブランチを統合させるマージする時にスナップショットだと非常に作業が早くできます。
Gitがデータを差分という形で持っているとブランチを切ったりマージしたりする時に差分をいちいち計算しないといけなくなります。
でもスナップショットで保存しておけば差分の計算をしなくて済む分とても早くブランチを切ったり、マージをしたり出来るようになります。
ちなみにGit以前のバージョン管理ツールの多くは差分としてデータを保存していて、ブランチを切るのに大変時間が掛かっていました。
大規模なプロジェクトになると数十秒掛かったりすることもありました。
Gitだとそれが一瞬でできます。
このような事情があってLinuxの作者のリーナス・トーバルズは当時大規模なLinuxカーネルの開発のバージョン管理システムを自作しました。
これがGitのスタートです。
では、バージョンを記録しておくことで、どのような事が出来るようになるのでしょうか。
バージョンを記録しておくことで、以前の状態に戻すことができるようになります。
バージョンというものを記録する時、Gitはコミットと呼ばれるものをします。
コミットについては後で解説しますので、今はGitというのはコミットというものでバージョンを記録していると簡単に押さえておいてください。
このコミットというのが、直前のコミットを記録しています。
どういうことかというと、「バージョン3」の前に「バージョン2」を保存していて、「バージョン2」を保存する時に「コミット2」を行っていたとします。
すると「コミット3」が「コミット2」を直前のコミットとして記録します。
同じように「コミット2」が「コミット1」を直前のコミットとして記録します。
このようにコミットする時に直前のコミットがどれかということを記録することで、最新のバージョンから以前のバージョンにたどることができます。
そして、それぞれのバージョンをファイルの状態をスナップショットとして保存しているので、その状態に戻すことができます。
最後に、今回Gitの仕組みを見てきましたが、内容をもう一度振り返ると、大事なことは2つです。
- Gitはデータをスナップショットとして保存しています。
- コミットが直前のコミットを記録しているので、コミットをたどることで以前の状態に戻せます。
今回の図をイメージで頭の中に残しておいて下さい。イメージがあるかないかで、今後の理解度が変わってくるのでしっかりGitの仕組みを図で頭の中に残しておいて下さい。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール