Git
「Git」は、ファイルやファイルの変更履歴を管理するソフトウェア(VCS)です。他のユーザーと共同してファイルの編集を行う機能も提供しています。
VCS(Version Control System)
VCSとは、ファイルの変更点など変更履歴の管理を行うソフトウェアです。「バージョン管理システム」とも呼ばれます。
VCSを利用すると、以下の利点が得られます。
- ファイルを以前の状態に戻せる
- 時系列に沿ってファイルの変更点を調べられる
- 誰が何のためにファイルを変更したのかを調べられる
- どこでいつ誰が問題を起こしたのかを調べられる
ファイルを誤って削除してしまった時や誤った編集をしてしまった時など、過去のファイルが必要になる時は多くの場合、問題が発生した時です。
このような問題に対処し易くなります。
またVCSの種類によっては、複数のユーザーが共同でファイルの編集が行えるよう、ファイルの整合性を取りつつファイルを管理する仕組みも提供しています。
ユーザーの管理からソフトウェアによる管理へ
VCSを利用することで、今までユーザーが手動で行っていたファイルの管理を、VCSに任せることができます。例えば、以下のようにユーザーが手動でファイル及びファイルの変更履歴を管理していたとします。
この状況では、誤ったファイルの削除やファイルの上書きなど、ユーザーの不注意による取り返しのつかない問題が発生しやすくなります。
特に多くのユーザーがこの状況下で作業を行うと、そのリスクも増えていきます。
VCSを導入することで、ファイルの管理上の多くのリスクを軽減することができます。
ただしその一方で、VCSの使い方を学習しなければなりません。
頼り過ぎに注意
VCSは完璧ではありません。VCSを利用するのはユーザーですし、VCSに対して操作を行うのもユーザーです。
VCSはある程度ユーザーの意図を汲み取りますが、その操作がユーザーが意図するものかどうかをチェックすることはできません。
VCSに対して誤った操作を行えば、残念な結果になります。
VCSの種類
VCSはその特徴により、以下の3種類に大別することができます。- LVCS(Local Version Control System)
- CVCS(Centralized Version Control System)
- DVCS(Distributed Version Control System)
LVCS(Local Version Control System)
「LVCS」は、自分のPCで利用する自分用の「VCS」です。ファイルやファイルの変更履歴は管理できますが、他のユーザーと共同してファイルを編集することはできません。
機能が少ない分、使い方は他のVCSよりもシンプルです。
CVCS(Centralized Version Control System)
そこで出てきたのが、「CVCS」です。「CVCS」は、他のユーザーとファイルを共有できる仕組みを持つ「VCS」です。
「集中型バージョン管理システム」とも呼ばれます。
アクセス制御
規模の大きいソフトウェアの開発など、多くのユーザーが共同して作業を行うには、「VCS」がユーザーのアクセスを管理できなければなりません。複数のユーザーがアクセスしてもファイルの整合性が取れるように、「CVCS」ではアクセスの調停を行う機能があります。
1つのサーバが主体
「CVCS」では、1つのサーバーが中心(Centralized)となり、そのサーバー内でファイルやファイルの変更履歴を管理します。ユーザーは、必要なファイルをサーバーから取得して作業を行います。
1つのサーバーで管理を行うため、誰がどのファイルを編集しているのか、何をしているのか、ある程度状況を把握することができます。
サーバーの障害に弱い
一方でサーバーに障害が発生すると、ユーザーができる作業は大幅に制限されます。「CVCS」はそれだけサーバーに依存した仕組みだということです。
サーバーのHDDが故障すれば、全データが失われます。
バックアップがなければ、データの復元は絶望的です。
ユーザーのHDDにある断片的なファイルをかき集めることも可能ですが、それを元にサーバーを復旧するには多くの手間がかかるでしょうし、そもそも復旧できるとは限りません。
HDDの故障は、「LVCS」も同様です。
DVCS(Distributed Version Control Systems)
次に出てきたのが、「DVCS」です。「DVCS」も同様に、他のユーザーとファイルを共有できる仕組みを持つ「VCS」です。
「分散型バージョン管理システム」とも呼ばれます。
「Git」は、「DVCS」に分類されます。
サーバーのコピー
「DVCS」は、サーバーで管理しているファイルやリソースを、ユーザーの環境にすべてコピー(Distributed)します。ユーザーはほとんどの作業を、そのコピーされた環境で行います。
この点が、「CVCS」と大きく異なる点の1つです。
サーバーに障害が発生しても、ユーザーは引き続きほとんどの作業を行うことができます。
「CVCS」のようにサーバーの復旧を待つ間、ユーザーは多くのことができなくなる、という状況を回避できます。
ユーザーは自分の環境で作業が完了したら、最終的な結果をサーバーに反映します。
また、サーバーのコピーということは、自身がサーバーになれるということです。
ファイルの変更内容が衝突したら
各ユーザーでサーバーのコピーを行ってファイルを編集するということは、同じファイルを異なる内容で編集する状況が出てきます。ユーザーがサーバーにファイルを反映する際、ファイルの変更内容が衝突することもあります。
このような状況に対応するために、マージを行う機能が提供されます。
ユーザーによるバックアップ
ユーザーの環境にファイルやリソースをコピーするということは、それ自体が、サーバーのその時点におけるバックアップになるということです。サーバーのミラーリングをしているのと同じです。
ユーザーの環境にコピーされたファイルやリソースを元に、サーバーを復旧させることができます。
サーバーが復旧するまで一時的にユーザーのPCをサーバーにすることも可能です。
だからと言って、「サーバーのバックアップが必要ない」ということではありません。
サーバーの障害に対応しやすくなる、というだけです。
自分のHDDだけで「DVCS」を利用しているなら、そのHDDが故障すればデータは失われ復旧できなくなります。
サーバーのバックアップは引き続き必要です。
初回のダウンロードに時間がかかる
サーバーで管理しているファイルやリソースをユーザーの環境にすべてコピーするため、ファイルが大量にある場合、ファイルのダウンロードに時間がかかります。特に初回のダウンロードは、時間がかかるでしょう。
この点は「CVCS」より劣る点になりますが、ブロードバンドが普及し、ネットワーク(インターネット)の帯域は十分実用的になりました。
運用を行う環境にも依りますが、大きな問題にはならないでしょう。
一度ダウンロードが完了すれば、後は差分更新でユーザーの環境とサーバーの環境を同期することができます。