はじめに
バージョン管理というと 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 のような GitHub や GitLab のようなホスティングプラットフォームはなく、また リモートブランチ の概念もありません。
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 の
rebaseやresetのように履歴を書き換えられないため、過去の変更履歴が厳密に管理できる。
🔹 SVN のデメリット
❌ ブランチの切り替えが遅い
- Git は
git checkoutでブランチを切り替えられるが、SVN はcheckoutし直す必要があるため遅い。
❌ リモートブランチがない - Git の
git push origin feature-branchのような運用ができない。
❌ GitHub のようなプラットフォームがない - SVN には
GitHubやGitLabのようなプラットフォームがないため、コード管理がしづらい。
まとめ
✅ SVN は 「集中型バージョン管理システム」 で、中央リポジトリが唯一の履歴管理場所。
✅ Git のような リモートブランチ はなく、変更は commit した時点でリモートに反映される。
✅ trunk・branches・tags の3つのディレクトリ構造で運用する。
✅ Git に比べるとブランチの切り替えが遅く、リモート運用がしづらい というデメリットもある。
✅ しかし 中央集権的な管理がしやすい ため、大規模な企業システムでは今も採用されることがある。
SVN は Git とは違う考え方のバージョン管理ですが、基本的な運用フローは似ています。
案件で SVN を使う場合も、基本を押さえておけば問題なく対応できると思います!
あとがき
SVN は Git ほど使われなくなってきていますが、企業によっては今でも採用されています。
今回調べてみて、Git と SVN の概念の違いを理解できた ので、実務でも活かせそうです!
もし間違いがあれば、ご指摘いただけると嬉しいです!
以上、Subversion (SVN) の解説でした!