はじめに
開発の現場ではどのようなバージョン管理システムを利用するのがよいでしょうか。
アプリケーションはソースコードを含めたファイルの集合によって作られています。
開発の現場ではファイルの変更も頻繁に、かつ複数名で行われることが多いです。
そうなると大変となるのがソースコードの管理です。
この記事ではバージョン管理システムの導入を検討している方のためによく聞かれるGitとSVNの違いについてエンジニアの視点から伝えします。
バージョン管理とは...
バージョン管理システムとはソースコード等のファイルを管理するシステムです。
いつ、だれが、どこにファイルを作成したか、また更新を加えたのか、などの過去のバー所を保持することができます。
障害や要望が発生した際にある時点のバージョンまで遡ることが容易になります。
また、同じソースコードに対して複数人が同時に作業を行ってもソースコードの最新版を見失わないようになります。
GitもSVNも共にバージョン管理システムであり、古典的なバージョン管理システムであるCVSからの流れを汲んでいます。
GitとSVNの違い
GitとSVNの大きな違いはバージョン管理システムの種類にあります。
Gitは分散型バージョン管理システム
SVNは集中型バージョン管理システムとなります。
集中型バージョン管理システムでは、リポジトリ(ファイルのバージョン管理を行う場所)はリモート環境のみに存在します。
開発メンバーはリモート環境のリポジトリにアクセスし、各ローカル環境にあるファイルをコミットしたり、ローカル環境へチェックアウトしたりします。
※コミット:新バージョンとしてのファイル保存
※チェックアウト:特定バージョンのファイル取得
分散型バージョン管理システムでは、リポジトリはリモート環境のみではなく、開発メンバーの各ローカル環境にも存在します。
メンバーは自身のローカル環境のリポジトリを作る際は、リモート環境のリポジトリから特定のバージョン情報をプル(Pull)して各ローカルにリポジトリを作成します。
メンバーは開発を行った際にローカル環境でコミットやチェックアウトを行います。
ローカル環境でコミットしたファイルについては適切なタイミングでプッシュを行い、リモート環境のリポジトリへコミットを反映させます。
Gitについて
Gitソースコード管理のイメージ
特徴(メリット・デメリット)
Gitの場合ローカルにあるリポジトリに自身のソースを登録することが可能なので、自分の作業の履歴を作ることが可能です。
チーム全体の履歴だけでなく、自分の開発履歴まで管理できるのが特徴です。
また、サーバ障害などでリポジトリが消えてしまったとしても、SVNの場合履歴の復元までは不可能ですが、Gitの場合は誰かのローカル環境のリポジトリから復元すれば、サーバから取得時点にはなりますが、履歴まで復元することが可能です。
デメリットとしては、慣れてしまえば簡単ですがそれなりに覚えることが多い点です。
プロジェクト内で初めて使う人が多い場合、使用方法などを浸透させるのに時間がかかります。
SVN(Subversion)について
SVNソースコード管理のイメージ
特徴(メリット・デメリット)
仕組みが簡単な点がメリットです。
SVNを扱う際も操作がとてもシンプルなので覚えることが少なく、すぐにプロジェクト内で浸透させることが可能です。
デメリットとしては、やはりバージョンの管理がローカルでできない点です。
例えばソースを開発しているときに、細めにコミットし個人で履歴を持ちたいことはあると思います。
SVNの場合、サーバに対してコミットを行うことになるので、たくさんの開発者で共有しているリポジトリに対して細めにコミットは難しくなります。
## おわりに
それぞれの特徴や違いを理解できましたでしょうか。
それぞれのメリットやデメリットを理解した上で導入をご検討ください。
複数名での開発時にとても便利になると思います。