こんにちわ。オルターブース小島です。 暖冬のせいか1月頭くらいから花粉症の症状が出てしまいくしゃみが止まりません。
さて、今回は非常に多くお問い合わせ頂くSVNとGitの違いについて簡単に解説します。
Subversion(SVN)
SVNもGitと同じバージョン管理ソフトの一つです。Git以前はSVNを使ってバージョン管理をしていたという企業も多いのではないでしょうか? SVNでは複数のエンジニアが共同で1つのソフトウェアを開発する、といったときにリポジトリを1箇所に集中させて管理するという特徴があります。
※SVNの運用イメージ図
一方、上記のような集中管理の場合、大きな課題が生まれてしまいます。
- 集中管理しているRepositoryがダウンすると全てのソースコードコミットが停止する。
- 複数のプロジェクトを同時並行した場合、リポジトリ内のコミットがカオス化する。
- 複数のソースコードを同時並行で開発するときでも共有ワークスペース(Repository)を使わなくてはいけない
たぶん他にもあると思いますが、現在のWeb開発では非常に大きなリスクになってしまいます。
Gitとの違い
SVNではRepositoryを集中管理していますが、Gitの良いところは分散管理できるところです。
※Gitの運用イメージ図
上記からSVNでの課題が解決されます。
- 集中管理しているRepositoryがダウンすると全てのソースコードコミットが停止する。
→ Local Repositoryで分散化される
- 複数のプロジェクトを同時並行した場合、リポジトリ内のコミットがカオス化する。
→ コミット履歴を保管することで差分管理をする
- 複数のソースコードを同時並行で開発するときでも共有ワークスペース(Repository)を使わなくてはいけない
→ トピックブランチで各自作業できる
またGitの運用としてはPull Requestでレビューして、トピックブランチから統合ブランチ(main)へmergeするといった運用をしますが、全く同様のことをSVNでやろうとすると非常に大変です。基本的SVNではTrunk(Gitでいうmain)にmergeする際はすべて手動でDiffを取ったり、コミットツリーっぽい何かを見ながら(rebaseとかない)行う必要があります。
複数のプロジェクトが動いているときは更に注意が必要になりますよね。
ブランチ戦略の違い
SVNでは先に書いたようにレビューが非常に大変です。
この理由はTrunkとBranchの差分比較が機能として提供されていないからです。
従って、各Branchで変更したものは手動で差分比較し、手動でMergeを行います。
つまり、TrunkとBranchのコードが一致していることを保証していないのです。
一方Gitは完全にそれを保証しています。
Gitはコミットごとにその履歴を持ちます。 履歴には大きく3つの情報が格納されています。
- リビジョンID
- 前段のリビジョンID
- 全ファイルのツリー情報のスナップショット
これを比較すれば良いだけなので、コミットが増えようがブランチが増えようが作業としては変わりません。SVNではBranchが増えたらカオスになります。またコミットツリー自体はRepository全体で共有されます。それによって複数のユーザーが何をしているかが把握できコンフリクトを簡単に解消することが出来ます。
さて、以上がSVNとGitの違いですがGitはリポジトリをクラウドで管理し、そのリポジトリを中心にDevExを向上させる事が可能です。
その仕組がGitHubになります。
最後に弊社のご紹介ですがGitHub EnterpriseやGitHub Copilot、Advanced SecurityなどGitHubすべてのサービスに精通しており、お客様のDevExを共に向上させるサービスを提供しておりますので、ご興味ある方は是非お問い合わせくださいませ。
👇GitHub Copilot導入支援について www.alterbooth.com
👇直接お問い合わせはこちらから
www.alterbooth.com