はじめに
バージョン管理というと 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)
の解説でした!