本記事では、GitとSVNの違いがなんなのかよく分からない人向けに、
両者の違いを図解を踏まえて分かりやすく解説していく。
またついでに、GitとGithubの違いにも後半で触れていく。
GitとSVNの違い

結論から言うと、GitとSVNの違いとは、
Gitは分散型バージョン管理、svnは集中型バージョン管理と言う違いだ。
両者ともに、バージョン管理ツールであると言う点に違いはないのだが、
上記の違いに伴い、バージョン管理の仕方で異なる点がいくつか存在する。
Gitは分散型バージョン管理、svnは集中型バージョン管理。
GitとSVNは両者ともバージョン管理システムという点では変わりはないが、そのシステムのあり方に大きな違いがある。Gitは分散型バージョン管理システムで、SVNは集中型バージョン管理システムだという違いだ。

Gitのバージョン管理
Gitでは、開発者はGitHubにコミットしてある大元のレポジトリ(リモートレポジトリ)を、ローカル端末上にコピーしてくる。そしてコピーして来たレポジトリ(クローンレポジトリと言う)に対して開発を行っていく。

この時、バージョン管理のデータの保管先は、ローカル端末のクローンレポジトリなので、バージョン管理に必要な作業は全てオフラインのローカル端末で完了してしまう(のちにローカルのバージョン管理データをGithubに送信する際はもちろんオンラインでなければならない)。
このことから、開発者が場所を選ばず、各々のリポジトリで柔軟にバージョン管理をすることが可能なのが分散型バージョン管理であるGitの強みだ。
- 開発者は、リモートレポジトリからローカルへリポジトリのクローンを作成する。
- ローカルのクローンレポジトリへソースのバージョン管理情報を記録(コミット)する。
- ローカルのリポジトリへの記録はオフラインでも可能なので、場所を問うことがない。
SVNのバージョン管理
一方SVNの場合、バージョン管理の情報は、各自のローカル上のレポジトリではなく、SVNサーバなどの一つの集中したリポジトリのみである。その集中リポジトリに、開発者たちはバージョン管理情報を直接コミットし、バージョン情報を保管する形になる。

一見データが一箇所に固まっていて管理が楽そうに見えなくもないが、SVNの場合、データのコミットなどの際、SVNサーバとローカル端末はネットワークで繋がっている必要がある。
また、SVNサーバが故障するなどした際に、集中して保管しておいた全てバージョン管理データが失われてしまうなど、Gitに比べるとそのデメリットは大きい。
- レポジトリは大元の一つのみ
- 開発者は、バージョン管理情報を大元のレポジトリに直接コミットする
- ネットワークが必須であり、大元のレポジトリが故障したりした際のリスクが大きい
他にもメリットやデメリットを調べたが、svnと大きく概念が違うメリットは上記の点だと思った。
ローカルにレポジトリがあるって感覚がsvnしか使ったことがない人には理解に時間がかかると思う。
あとはなんだろう、ソースツリー(Gitのクライアントソフト)での変更点の見やすさとかだろうか?。あとGitHubがあることで、他人にソースコードを見てもらったり、逆に見るのもお手軽になったのは開発の現場以外でもありがたい。
GitとGithubの違い
ここからはおまけとしてGitとGitHubの違いにも触れておく。
結論から言うと、Gitはシステムで、GitHubは場所と考えたらわかりやすかった

Gitは各ローカルPCにインストールし、
プログラムソースをバージョン管理できるシステムのこと。
GitHubは、バージョン管理されてるプログラムソースを置いておく場所をインターネット上の一箇所にまとめておくための場所だ。
Gitとは

プログラムソースなどの変更履歴を管理する、分散型のバージョン管理システムのこと。
ローカルの端末上のリポジトリで、バージョンの管理データを保管することができる。
GitHubとは

Gitで管理されたプログラムソースなどをインターネット上で保管、公開などできるようにしたwebサービスのこと。ローカル端末上のリポジトリで管理していたバージョン管理データを、githubに保管・公開することができる。
関連記事