Subversion (SVN) とは? Git との違いを解説!

はじめに

バージョン管理というと Git を思い浮かべる人が多いかもしれません。
しかし、案件によっては Git ではなく Subversion (SVN) を使うこともあります。
そこで、SVN とは何か? Git と何が違うのか? を調べてみました。

Subversion (SVN) の特徴

SVN は 「集中型バージョン管理システム」 であり、中央のリポジトリサーバーで全ての変更履歴を管理します。

🔹 SVN のリポジトリ構造

SVN では、通常 「trunk」「branches」「tags」 というディレクトリを使います。

ディレクトリ名役割Git の対応するもの
trunkメイン開発用のブランチmain または master
branches開発中のブランチを格納するフォルダfeature-branch など
tagsリリース版のスナップショットを格納するフォルダgit tag

Git のような GitHubGitLab のようなホスティングプラットフォームはなく、また リモートブランチ の概念もありません。

Subversion (SVN) の運用の流れ

SVN の基本的な開発フローを見てみます。

① trunk の最新をコピーして branches/feature-xxx ブランチを作成

svn copy <リポジトリURL>/trunk <リポジトリURL>/branches/feature-branch -m "新機能開発用のブランチ作成”

② 作業ブランチをチェックアウト

svn checkout <リポジトリURL>/branches/feature-branch

これで branches/feature-branch の最新コードをローカルに取得できます。

③ 修正作業を行う

変更があるファイルを編集します。

④ branches/feature-xxx にコミット

svn add 修正したファイル  # 新規追加のファイルを SVN に登録
svn commit -m "機能追加: ○○の処理を実装"

Git の git push のような操作は不要で、commit した時点でリモートに反映されます。

⑤ テスト環境で動作確認(必要に応じて trunk と比較)

svn diff <リポジトリURL>/trunk <リポジトリURL>/branches/feature-branch

これにより、trunk との差分を確認できます。

⑥ trunk にマージ

まず trunk の最新状態を取得します。

svn checkout <リポジトリURL>/trunk
svn update

次に、ブランチの変更を trunk にマージします。

svn merge <リポジトリURL>/branches/feature-branch

競合が発生した場合は、手動で解決します。

svn status  # 競合があるか確認
svn resolve --accept=theirs-full <ファイル名>  # ブランチの変更をそのまま適用
svn resolve --accept=mine-full <ファイル名>   # 自分の変更を優先

最後にマージ結果をコミットします。

svn commit -m "feature-branch の変更を trunk にマージ"

SVN では commit すると変更が中央リポジトリに反映 されます。

タグ (tags) の使い方

SVN では、タグ (tags) はリリース時に svn copy を使って作成します。

svn copy <リポジトリURL>/trunk <リポジトリURL>/tags/release-1.0.0 -m "バージョン 1.0.0 リリース"

Git の git tag とは異なり、SVN のタグは 単なるコピー です。

SVN と Git の違い

🔹 SVN のメリット

シンプルな運用

  • Git のように ローカルリポジトリリモートリポジトリ を意識せずに運用できる。
    中央管理なので統制しやすい
  • 管理者が「誰が何を変更したか」を把握しやすい
    履歴の改変ができない
  • Git の rebasereset のように履歴を書き換えられないため、過去の変更履歴が厳密に管理できる

🔹 SVN のデメリット

ブランチの切り替えが遅い

  • Git は git checkout でブランチを切り替えられるが、SVN は checkout し直す必要があるため遅い。
    リモートブランチがない
  • Git の git push origin feature-branch のような運用ができない。
    GitHub のようなプラットフォームがない
  • SVN には GitHubGitLab のようなプラットフォームがないため、コード管理がしづらい

まとめ

✅ SVN は 「集中型バージョン管理システム」 で、中央リポジトリが唯一の履歴管理場所。
✅ Git のような リモートブランチ はなく、変更は commit した時点でリモートに反映される。
trunkbranchestags の3つのディレクトリ構造で運用する。
Git に比べるとブランチの切り替えが遅く、リモート運用がしづらい というデメリットもある。
✅ しかし 中央集権的な管理がしやすい ため、大規模な企業システムでは今も採用されることがある。

SVN は Git とは違う考え方のバージョン管理ですが、基本的な運用フローは似ています。
案件で SVN を使う場合も、基本を押さえておけば問題なく対応できると思います!

あとがき

SVN は Git ほど使われなくなってきていますが、企業によっては今でも採用されています。
今回調べてみて、Git と SVN の概念の違いを理解できた ので、実務でも活かせそうです!
もし間違いがあれば、ご指摘いただけると嬉しいです!
以上、Subversion (SVN) の解説でした!