概要
本日はバージョン管理システムとその中で最も人気のあるgitについて解説します
まずはバージョン管理システムとは何か解説します
そのあと、gitは他のバージョン管理システムと比べ何が優れているかについて解説します
バージョン管理システムについて
まずはバージョン管理システムについて解説します
バージョン管理システムを使用することで、ファイルに対して
誰が、いつ、どのような方法で変更を加えたかを記憶することができます
それらを記憶することで次のようなメリットが生じます
一つ目はファイルの変更内容の差分を確認できることです
変更を反映する前にどのような差分が発生しているかを確かめ
想定外の変更が行われていないことを確かめることでバグの発生を減らすことができます
二つ目はバグが既に発生してしまっている場合、過去のどの時点でバグが混入したかを
さかのぼって特定することができることです
これも変更履歴を全て記憶しているからこそできることです
三つめは共同作業の効率化です
システム開発では複数人で開発を行うことが多いです
共同開発をしていると複数人が同一のファイルに対して変更を加えることがあるでしょう
そのようなときにある人の変更内容を別の人の変更内容で上書きしてしまうことがあります
どちらか一方の変更しか反映されない状況になってしまうこのような状況のことを競合と呼びます
バージョン管理システムでは競合が起こった際に通知が届くことで知らずのうちに
他人の変更を上書きしてしまうということを防ぐことができます
四つ目は任意の時点への復旧です
特に重大なバグが発生した場合には過去の正常に動作していた状態に戻したいときがありますが
そのようなときにも簡単に過去のファイルを復元することができます
数あるバージョン管理システムの中でもgitを使う理由
gitが登場するまでのバージョン管理システムは
集中型バージョン管理システムと呼ばれていてSubversionが代表的です
それに対してgitは分散型バージョン管理システムと呼ばれています
前提として
バージョン管理システムを使う際には最終的なファイルの管理場所をある特定のサーバに決め、
そこから各々の開発環境や本番環境にコピーするという方法で運用なされることが多いです
集中型バージョン管理システムでは
特定のサーバだけがファイルのバージョンを記憶しているのに対して
分散型バージョン管理システムではコピー先の開発環境等にもバージョンが記憶されています
その違いによって次のようなメリットが生じます
一つ目は障害への耐性です
集中型バージョン管理システムでバージョン管理を行っているサーバが止まってしまうと
ファイルをコピーしてくることや、反映することができなくなります
最悪の場合は復元することが不可能になってしまいます
それに対して分散型バージョン管理システムでは別のリポジトリから復元することが容易です
集中型バージョン管理システムではバージョン管理している箇所が一つだけで
そこで問題が発生すると場合によっては復旧が不可能になりますが
分散型バージョン管理システムでは複数個所でバージョン管理しているので
一か所に問題が発生しても他の個所を代わりに使えるということです
二つ目はローカルリポジトリで自由なブランチ管理ができるということです
システム開発を行っている際に、いくつかのステップに分けたい場合があります
例えば、ユーザー管理画面にて、ユーザー登録機能、ユーザー編集機能
ユーザー削除機能の3つを開発しようとしているとします
集権型バージョン管理システムでは一つの機能が完成するたびにサーバに反映するか
全ての機能が完成してから反映するかという選択肢しかないでしょうが
前者は機能が中途半端な状態でソースコードを共有することになってしまいます
後者は最初の機能が完成した段階で変更を保存しておくということができずに不便です
しかし、分散型バージョン管理システムであればローカルに変更を保存することができるので
これらのことは問題になりません
三つ目の理由は動作が高速なことです
gitはsvnと比較して10倍から100倍高速とのことです
サイズが大きいことや、リポジトリをコピーする時間はかかってしまいますが
リポジトリのコピー自体はそれほど頻繁に行うわけではありませんので
そこまで大きな問題にならないでしょう
これは若干余談になりますがGitを使うもう一つの利点としてはGithubが使えるということがあります
現代のOSSの多くはGithub上で管理されており、OSSプロジェクトに参加する際には
Gitを習得するのが必須だでしょう