集中型バージョン管理と分散型バージョン管理の主な違いは、集中型バージョン管理ではバージョンがリモートリポジトリに保存されるのに対し、分散型バージョン管理ではリモートリポジトリだけでなく、ローカルマシンのローカルリポジトリにもバージョンを保存できる点です。
ソフトウェア開発で行われる主要な活動の1つに、ソースコード管理(SCM)があります。
ソフトウェアの要件は常に変化しており、ソースコードを修正する必要がある。
SCMでは、このようなプロジェクトの状態をバージョンとして保存する。
そのため、開発者は以前のバージョンを把握することができる。
バージョン管理システムは、ソースコードの管理を可能にし、企業レベルのソフトウェア開発において有益である。
さらに、バージョン管理システムには、集中型バージョン管理システムと分散型バージョン管理システムの2種類があります。
集中バージョン管理とは
集中型バージョン管理では、一連のローカルコンピューターと1台のサーバーがあります。
サーバーは、中央の場所として動作します。
開発者がローカルマシンでソースコードを変更すると、その変更は中央のサーバーに保存されます。
作業コピーはローカルマシンでも利用できますが、バージョンはサーバーに保存されます。
つまり、中央の拠点がバージョンを管理する。
リポジトリとは、ソースコードを保存する記憶領域のことです。
中央のサーバーのリポジトリをリモートリポジトリと呼ぶことにする。
中央の拠点(サーバー)に障害が発生した場合、開発者はバージョンにアクセスできなくなる。
さらに、ネットワーク接続の問題で、開発者は中央のリポジトリにアクセスできなくなる。
以上が、集中管理型バージョン管理システムの欠点です。
分散バージョン管理とは
分散型バージョン管理は、集中型バージョン管理の制限に対する解決策を提供します。
コンピュータのセットとサーバーがあります。
サーバーはリモートリポジトリを持っています。
同時に、各コンピューターは、独自のローカルリポジトリを持っています。
各マシンがローカルリポジトリを持つので、サーバーの故障の問題はない。
リポジトリは複数のマシンに分散されている。
したがって、これを分散型バージョン管理システムと呼ぶ。
さらに、この設定では、各開発者が自分自身のリポジトリを取得します。
開発者は、このローカルリポジトリを変更し、それを他の開発者と共有することができます。
また、他のリポジトリからの干渉もありません。
各リポジトリは履歴を追跡し、他のリポジトリへの変更のプッシュとプルを実行し、マージをサポートします。
また、ネットワークに接続されていない場合でも、開発者は自分のローカルリポジトリにバージョンを作成することができます。
インターネットに接続できる環境であれば、リモートリポジトリに変更を反映させることができます。
集中型と分散型バージョンコントロールの違い
定義
集中型バージョン管理は、サーバーの中央リポジトリが最新のコードをクライアントマシンに提供する、最も単純なバージョン管理の形式です。
一方、分散バージョン管理は、完全なコードベース(その完全な履歴を含む)がすべての開発者のコンピュータにミラーリングされているバージョン管理の形式です。
したがって、これが集中型バージョン管理と分散型バージョン管理の主な違いです。
ローカルレポジトリー
集中型バージョン管理では、ローカル・リポジトリは存在しませんが、分散型バージョン管理ではローカル・リポジトリが存在します。
したがって、この点も集中型と分散型の重要な違いです。
速度
さらに、分散型バージョン管理は集中型バージョン管理よりも高速に動作します。
インターネット接続環境
さらに、集中型バージョン管理では常にインターネットに接続する必要がありますが、分散型バージョン管理ではインターネットに接続しなくてもローカルリポジトリで作業することができます。
主な内容
また、集中型と分散型バージョンコントロールのもう一つの違いは、その焦点です。
集中型バージョン管理はファイルの同期、追跡、バックアップに焦点を当てますが、分散型バージョン管理は変更の共有に焦点を当てます。
失敗例
集中型バージョン管理では、中央のサーバーに障害が発生するとすべてのバージョンが終了するが、分散型バージョン管理では、メインサーバーに障害が発生しても開発には影響がない。
結論
集中型バージョン管理と分散型バージョン管理の大きな違いは、集中型バージョン管理ではバージョンをリモートリポジトリに保存するのに対し、分散型バージョン管理ではリモートリポジトリだけでなくローカルマシンのリポジトリにもバージョンを保存することができる点です。
つまり、集中型バージョン管理はシンプルだが、デメリットもあります。
一方、分散型バージョン管理はより柔軟性があります。
そのため、ソフトウェア開発では、Gitなどの分散型バージョン管理システムがより普及しています。