GitとSVNの違いとは?
基本構造、ブランチ管理、マージの仕方まで詳しく解説
2022年2月16日
ご相談・無料お見積りSVN(Apache Subversion)に代わるバージョン管理システムとして、近年、存在感を増しているのがGitです。
OSSを活用した開発現場では定番といえるツールであり、「Gitで学んできた世代」の若手開発者たちがすでに大いに活躍しています。DXの実現、「2025年の崖」など、様々な命題、課題が浮上している今、従来通りのツールで従来と同じような開発を続けていては、競争優位性は保てません。開発スピード向上のために、DevOps、アジャイルといった手法を取り入れようとするなら、もはやGitを避けては通れないでしょう。
本コラムでは、GitとSVNの基本的な構造の違いや、あわせて使うべきツール、SVNによる従来型の開発運用がGitでどう変わるのかなど、Gitを検討中の開発者からよく寄せられる疑問点について、詳しく解説します。
知っておきたい構造の基本。GitとSVNはどう違う?
GitとSVNの違い① 構造的な面
GitやSVNには、それぞれリポジトリモデルに応じた管理方式が存在します。
SVNは集中型バージョン管理システムです。リモートサーバにあるリモートリポジトリに対して、開発者全員が直接作業を行います。開発者は任意のバージョンのファイルをローカルにダウンロード(チェックアウト)し、作業完了後にリモートリポジトリに変更を反映(コミット)します。
また、SVNは悲観的排他制御です。作業中はリモートリポジトリの更新をロックします。他の開発者による変更を制御することで整合性を保証します。
これに対しGitは分散型バージョン管理システムです。開発者はサーバ上のリモートリポジトリをローカルにまるごと複製(クローン)して作業を行います。
Gitにはステージがあるため、他の開発者と共有するファイルを指定してバージョン管理することが可能です。開発者はワークスペースで更新したファイルをステージに追加し、ローカルリポジトリに反映(コミット)します。他の開発者にも共有したい場合はリモートリポジトリに反映(プッシュ)します。Gitは作業の度にリモートリポジトリにアクセスすることなく、開発者ごとにローカルでバージョン管理することが可能です。
また、Gitは楽観的排他制御です。リモートリポジトリのロックはせず、ローカルの作業内容をリモートリポジトリに反映させる際に、差分を確認します。競合が発生した場合はリモートリポジトリの更新をさせないように制御することで整合性を保証します。
GitとSVNの違い② ブランチ
SVNはディレクトリを複製してブランチを作成します。作成する際は、派生元となるディレクトリ、例えばtrunkディレクトリをbranchesディレクトリ配下にコピーして作成します。また、ブランチの作成やマージ時には差分計算処理が実行されます。そのためプロジェクトの規模にもよりますが、数秒から数分の時間がかかるため頻繁なブランチ作成やマージを避ける傾向にあります。
一方、Gitは更新断面のスナップショットを複製してブランチを作成します。そのため、ブランチ作成に時間がかかりません。また、コミットの際に更新前のコミットのスナップショットを記録しているので、マージを行う際も差分比較が容易なためマージが非常に簡単です。
これらのGitの特徴は、開発者の気軽なブランチ作成を実現します。
GitとSVNの違い③ ブランチ運用
Gitは気軽なブランチ作成の実現が可能とお伝えしましたが、ブランチ運用をなぜ行うのでしょうか。それは、変更管理テーマ、エンハンステーマをブランチ単位で開発することで管理しやすくなるためです。ブランチ単位でテーマを管理することで、リリース時の取り込み漏れや間違いなどが減りリリース品質が向上します。
また、マージ(差分取り込み)可能な人を権限管理することで納品管理を明示的に行うことが可能です。
開発における Gitの役割
Gitは手軽にブランチ作成やマージが可能なことから、ブランチ種別ごとに役割を分けたブランチ運用を行うことで、開発の統制がしやすくなり、ソースコードを安定した状態に保ちやすくなります。
リリースがいつでも可能な安定している統合ブランチから、機能追加やバグ修正といったある課題に関する作業を行う開発用ブランチを作成します。開発者は作成した開発用ブランチで作業を行います。開発者が作業を完了し、開発用ブランチから統合ブランチにマージする際、開発者がマージリクエストを提出します。マージリクエストを受けた管理者は、統合ブランチと開発ブランチの差分を確認し問題がなければマージを実施します。
現在主流になっているAgile開発は、漸進的にプロダクトを成長させていく開発方法です。開発期間を細かなイテレーションで区切り、開発の優先順位(開発テーマ)を決めて、設計からリリース、分析を繰り返しながら、ビジネス価値を最大化していきます。
ユーザ・顧客要望を取り入れ、柔軟に開発の優先順位を変更していけるのもAgile開発の特色です。そのため、最新断面やリリースバージョンの断面からブランチ作成、運用が容易なGitが必要不可欠となります。
Gitとあわせて活用したい各種リポジトリマネージャー
Gitを導入する際には、ブラウザベースでの操作を可能にし、様々な拡張機能を提供するGitリポジトリマネージャーをあわせて活用するのが一般的です。Gitリポジトリマネージャーを活用することで、細かな権限管理や承認機能による統制管理、Web画面上での差分やリリース断面を確認することができるため利便性が向上します。代表的なものにはGitHub、Bitbucket、GitLabなどが挙げられます。
GitHubはマイクロソフト社が提供する開発者のためのプラットフォームで、ユーザ規模は数百万人超と際立っています。世界中の開発者とコードのレビューなどを共有できる点が人気です。
Bitbucketはアトラシアン社によるGitソリューションです。プロジェクトの計画からテストやデプロイまで、Gitに関する一連の作業を集約して行う場を提供しています。アトラシアン社のほかのソリューションとの連携性の高さも、メリットとしてよく挙げられます。
GitLabはOSS(一部有償)のバージョン管理システムであり、DevOps実現に必要な機能を兼ね備えたオールインワンソリューションです。計画から運用監視までの各工程における最適なツールの選定や、互換性を気にする必要がありません。画面上で品質分析結果の確認やデプロイしたアプリのステータスやログを確認することも可能です。
GitLabについては、コラム「GitLabの使い方~DevOpsを最短距離で実現しよう~」でも詳しく解説していますので、ぜひご確認ください。
- GitHub 公式サイト: https://github.co.jp/
- Bitbucket 公式サイト: https://bitbucket.org/
- GitLab 公式サイト: https://about.gitlab.com/
Gitを導入する前に注意したいこと
Gitの導入時に注意したいのは技術者の教育です。SVNに親しんだ新規ユーザが失敗しやすいポイントはいくつかあり、ブランチ管理については特に注意が必要です。ブランチ作成時/納品時 の差分を意識しつつ、開発を進めることが求められます。
SVNで運用中のプロジェクトを、Gitに移行させることも可能です。SVNの更新履歴を含めた全リポジトリを同じ構成で移行する方法と、リポジトリ構成を見直してファイルのみ移行する方法があります。後者の場合、必要に応じて開発履歴の確認のためにSVNサーバを残しておくこともあります。 どのリポジトリマネージャーで、どんな機能を使うかについても、要件に応じた多様な選択肢が存在します。これらは正しい知見を持って選択することで、最大限の効果を引き出すものです。
NRIではこのようなGitの導入・運用に関して、システム開発管理統合サービス「aslead」による支援を行っています。自社での長年に渡るGitの運用実績と、5000人超の社内ユーザによる豊富な経験をベースに、お客様の開発運用を支えています。Gitで疑問や不安をお持ちなら、まずは、お気軽にお問い合わせください。
GitやGitLabの導入支援なら、asleadにお任せください
asleadではDevOps導入に関するサービスの開発・導入実績を豊富に持っています。お客様に合わせた最適なご提案をさせていただきますので、まずはお気軽にお問い合わせください。
ご相談・無料お見積り