はじめに

バージョン管理ソフトの選択に迷っていませんか?
有名なバージョン管理ソフトを挙げるとするなら「Git」と「Subversion」が浮かびます。
Subversionは長らく使われ続けてきたので、そろそろGitに移行しようかと思っている方も多いのではないでしょうか。
この2つは大きく設計が異なっているため、その違いを理解しておく必要があります。
この記事では、エンジニアの方のためにGitとSubversionの違いについてお伝えしていきます。
違いを理解して、自分に最適なバージョン管理ソフトを選びましょう。

そもそもバージョン管理ソフトってなに?

バージョン管理ソフトは、ファイルを管理するデータベースのようなものです。
プログラムには、さまざまなファイルが必要でソースコードも複数ファイルに渡っています。
複数人が絡むプログラム開発では、ファイルをしっかり管理していないとどれが最新のファイルかわからなくなったり、誤って上書きしてしまったりします。
バージョン管理ソフトを使えば、リポジトリ(ファイルの保存場所)から常に最新のファイルが取得できますし、誤って上書きしてしまうこともありません。
また、ファイルの履歴がずっと残るため、後からの調査にも役立ちます。

GitとSubversionはどう違う?

GitとSubversionの大きな違いは、分散型か集中型かという点です。
つまり、リポジトリが複数あるか、ひとつなのかということです。
これは重要な違いです。
Gitは分散型のため、全員で共有するリモートリポジトリの他に、各々のローカルマシン上にローカルリポジトリを作成できます。
これはリモートリポジトリのコピーのようなものなのですが、別々にコミット(ファイルの保存)をすることができ、適宜同期を取ります。
一方、Subversionは集中型のため、リポジトリはひとつしかありません。
リポジトリからローカルマシン上に作業コピー取得し、作業完了後にリポジトリに直接コミットします。
これは一旦ローカルリポジトリにコミットしてからリモートリポジトリと同期するGitとは異なります。
まとめると、GitとSubversionの大きな違いは自分専用のリポジトリが持てるかどうかということです。
Gitであれば、たとえネットワークにつながっていなくてもローカルリポジトリにコミットできます。
自分だけのリポジトリなので、気軽にコミットでき、なにか間違えたらリモートリポジトリと同期する前に取り消すことも可能です。

その他のGitとSubversionの違い

コマンドの違い

GitやSubversionなどのバージョン管理ソフトは、基本的にコマンド(CLI)で操作します。
もちろんGUIフロントエンドもありますが、内部ではコマンドを実行しています。
GitとSubversionのコマンドは似ていますが多少異なっているため、移行の際にはコマンドを覚え直す必要があります。

リビジョン番号の違い

コミットをすると、そのコミットにはリビジョン番号というID(識別子)がつきます。
Subversionは集中型なので、リビジョン番号も連番になっており単純です。
一方、Gitは分散型なので、連番ではなくハッシュ値なので数字とアルファベットの羅列です。
とはいえ、リビジョン番号を覚える必要はあまりないので、ほとんど問題にはなりません。

ブランチとマージの違い

ブランチとは、ファイルのバージョンを枝分かれさせることで、同時に複数のファイルバージョンを管理できます。
多くの場合、最終的には元のファイルにマージ(統合)してひとつのファイルに戻します。
GitとSubversionのブランチとマージの動作は異なっており、Gitのほうがより軽量で高速に動作します。
このため、Gitではブランチを活用した開発スタイルを採用する現場が多いです。

まとめ

GitとSubversionの違いがお分かりになりましたか?
筆者としては、これからバージョン管理ソフトを使い始める方はGitを選んだほうが良いと考えます。
なぜなら、分散型で軽量ですし、多くのリポジトリホスティングサービスがあり、非常に人気が高いからです。現在Subversionを使っている方も、徐々にGitに移行するとよいでしょう。
あなたはどちらのバージョン管理ソフトを使いますか?