Gitが生まれるまでについて

Gitの歴史は熱い。いい意味でも悪い意味でも。

昔々、といっても1990年代〜の出来事ですが、Linux kernelというオープンソースのプロジェクトが進んでいました。Linuxの説明はググってもらうとして、そのプロジェクト内で2002年に誰かが「DVCSってのを作って、それで俺たちのプロジェクト管理しようぜ」と言い出しました。このDVCSはBitKeeperと呼ばれました。

しかし2005年にLinuxカーネルのコミュニティと、Bitkeeperを開発していたコミュニティが(たぶん喧嘩をして)袂を分かつ事になりました。Linux勢達はこのBitkeeperの特別仕様権利を失います。そこで考えるのはもちろん、自前のDVCSを作ろうぜって事な訳で、せっかく作るならBitkeeperよりクールな奴を作ろうぜって話になったようです。コンセプトとしては

  1. 早くて
  2. シンプルで
  3. ブランチに強くて
  4. 全部配賦で
  5. 自分たちがやってるLinuxカーネルプロジェクトみたいな超でかいプロジェクトでも運用可能なやつ

を作ろうぜって事になり、2005年に出来上がったのがGitなのです。ローンチ段階ですでに超クールなソフトになっていたみたいで、特にブランチを切る的な機能に関しては革命的に便利だったみたいですよ。僕は知らないけど。

バージョンコントロール(VCS)について

バージョンコントロールとは、ファイルの変更を繰り返し保存して、それを呼び戻したりするシステムです。一般的にはプログラミングのコードなどが記述されているファイルを扱う事が多いのですが、実はほとんどすべての種類のファイルを扱う事が出来ます。グラフィック関係やWeb系の仕事をしている人達は、2019年現在、ほぼほぼこのVCSを使っています。扱っているファイルに問題が発生した時、落ち着いて前のバージョンに戻ってみたり、何が問題なのかバージョンを比較して調べてみたり、あと誰がバグを発生させたのか調べたりする事で問題の解決を図るのです。あとバックアップにもなるので、ファイルが飛んだ時に復活出来たりします。

ローカルでのVCS

実はVCSを意識しなくても、普段パソコンを使っていると似たような事をしていたりします。ちょっとずつ更新していく系のExcelファイルを扱っている時に、上書き保存せずに「名前をつけてファイルを保存」する事で取り返しのつかないミスを防ぐっていうのはよく聞くパソコンあるあるです。僕はやらないのですが、物書きの人は初稿を修正する際に第2稿ー第3稿と別々に保存していくやり方をする人も多いと思います。

そんなシンプルなやり方でも十分と思う人もいるでしょうが、「どこのフォルダにまとめて保存しているか忘れた」とか「まちがってCommand+S押しちゃった」とか、そうゆうエラーが多いのもまた事実。

プログラマーの人達は長い間、「なーんか上手いやり方ないかなー」って考えてきたのです。

CVCSs

問題はまだあって、チームで作業している時は特に「なーんか上手いやり方ないかなー」って多くのプログラマーが考えていたのです。勝手に更新かける奴、みんなで同じディレクトリに保存しようって言ってるのに独自にフォルダを作り始める奴、他の人が作業している最中にファイルを開く奴などなど、ルールを明確に決めておいても、自分の都合の良いように作業工程を決めだす奴がたくさんいたのです。(あーなんか前職の会社思い出してきた)

まーそれでも複数人で作業しなくちゃいけないケースは多くて、大抵の場合共用のサーバーを使って行うんですが、そうゆうVCSをCVCSs(Centralized Version Control System)って呼んだりします。サーバーが1台あって、複数のクライアントがそこにアクセスするっていう、そうゆう形です。

身勝手なクライアントに管理者がブチ切れたりする事はしょっちゅうだったのですが、(1)チームで作業出来ると何かと便利(2)各自がローカルで管理するよりは遥かに楽っていう理由から、このCVCSsは長い間制作現場でスタンダードな形として使われてきたのです。

↑で紹介したローカルVCSとCVCSですが、この2つは最も大きな問題をはらんでいます。それは「データが消えたら世界の終わり」というケースです。ローカルの場合はパソコンがぶっ壊れたら終了ですし、CVCSもサーバーが停電とかで止まっている間は全員の作業が止まってしまいます。バックアップ取ってればいいんですが、そもそもバックアップの為にVCS入れてるのに更にそのバックアップを取るとか、なんかアホらしくないですか?(もちろん多くの企業はそうしていた)

DVCS

そこで登場したのがDistributed Version Control Systemってやつで、Gitはこれにあたります。サーバーはもちろん、各クライアントも、現状データ及び変更履歴を全部保存するっていう方式です。これならサーバーが爆発しても大丈夫。更にこの方式によって、現代的なワークフロー(スタートアップとかがやってるやつ)が実現するのです。