Open5

Gitが普及した理由

iwatakaiwataka

Gitはバージョン管理システムとして現在ほとんどのシステム開発の現場で普及している。
過去にはSVNなどが使われていたが、現在はGitがデファクトスタンダードとして扱われている。

Gitがこのように普及した大きな理由としては以下のようなものが挙げられる。

  1. 分散型であること
  2. GitHub等の開発プラットフォームの出現
  3. ブランチ作成やマージ等の処理のシンプルさ・速さ
iwatakaiwataka

分散型である利点は、複数の開発者がそれぞれ独立して変更管理できるということである。

SVN等の集中型のバージョン管理システムの場合、単一のリモートリポジトリに各開発者が直接コミットすることになり、コミットごとにコンフリクトが発生したり、ロックの取り合いになったりすることがある。

それに対して分散型は、各開発者の環境にそれぞれローカルリポジトリが作られ、その中で独立してコミットや変更管理が可能となる。最終的にはリモートリポジトリにコミットを反映することになるが、それまでは各開発者で独立して開発ができるようになる。

iwatakaiwataka

GitHub等の開発プラットフォームの出現がGitの普及に大きく貢献したのは、今更説明するまでもないことだと思っている。

ただし、ここで疑問に思うのは、なぜ他のバージョン管理システムで同じようなサービスが無かったのか、ということだ(SvnHubみたいなのがあっても良さそうな気がするが、自分が知っている限りではそのようなサービスで有力なものはない)。

この点について言及している情報はあまりないような気がするが、自分はGitとSVN(もしくは他のバージョン管理システム)のデータ構造の違いが影響しているのではないかと考えている。というのも、Gitはコミットごとにリポジトリ全体のスナップショットをデータとして保持するのに対して、SVNはコミットをdiffデータとして保持するという違いがあり、そのためにコミット間のdiffや、コミットのチェックアウトではSVNのほうが遅い傾向にあり、Webサービスとして提供するのが難しいのではないか、という気がする。
※かなり私見

iwatakaiwataka

GitとSVNの内部データ構造の違いの概要については以下のページにわかりやすく書かれている。

https://www.ricksoft.jp/blog/articles/001410.html

公式文献によるGitの詳細を知りたい場合は、以下のページを読むと良い。

https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

また、SVNは以下のページに書かれている("delta"というのが差分情報を表している)

https://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html