概要
集中型VCS リビジョン番号 ブランチ/タグはコピー
Subversion(SVN) は、中央サーバーに履歴を集約する 集中型 バージョン管理システムです。
1つの中央リポジトリに対して、開発者は svn クライアントでチェックアウト/コミットを行います。
典型構成は trunk / branches / tags。コピーは軽量で、タグは不変のスナップショットとして扱うのが慣例です。
基礎(用語と基本概念)
ワーキングコピー
開発者のローカルにチェックアウトした作業ディレクトリ。メタデータ(.svn)を含み、差分や状態を追跡します。
リビジョン
リポジトリ全体に対して単調増加する「スナップショット番号」。例:r10542。
ブランチとタグ
SVNでは「コピー」の仕組みで実現。svn copy はメタデータ的に軽量で、高速です。
典型レイアウト
repo/
trunk/
branches/
feature-x/
release-1.0/
tags/
v1.0.0/
最低限のフロー
- チェックアウト:
svn checkout URL - 編集・追加:
svn add - 確認:
svn status - コミット:
svn commit -m "msg" - 更新:
svn update
基本(よく使うコマンド)
リポジトリのチェックアウト
svn checkout https://example.com/svn/project/trunk project
変更の確認
svn status
svn diff
新規ファイル追加 & コミット
svn add src/main.c
svn commit -m "Add main.c"
ブランチ作成
svn copy ^/trunk ^/branches/feature-x -m "Create branch feature-x"
ブランチへ切替(切替は working copy 単位)
svn switch ^/branches/feature-x
タグ作成
svn copy ^/trunk ^/tags/v1.0.0 -m "Tag v1.0.0"
マージ(例:feature-x → trunk)
svn switch ^/trunk
svn merge ^/branches/feature-x
svn commit -m "Merge feature-x into trunk"
認証情報の削除(クライアント)
svn logout https://example.com/svn
💡 ^/ は「リポジトリルート」を指す SVN の省略記法です。
最新情報(LTS / リリース)
現行の推奨 LTS 系は 1.14 系、最新安定は 1.14.5(2024-12-08)。セキュリティ修正 CVE-2024-46901 などが含まれます。運用中のサーバ/クライアントは適宜アップデートを検討してください。
- 公式トップの最新アナウンス:Apache Subversion
- ダウンロード(LTS):Download Source/Binaries
- リリースノートと履歴:Release Notes / History
- Quick Start:Quick Start
mod_dav_svn / svnserve の脆弱性に注意。公開直後はディストリ配布待ちの場合があるため、各OSの保守リポジトリも確認を。応用(実務のベストプラクティス)
- レイアウト指針:
trunkは常にデプロイ可能、安定化はrelease-x.yブランチ、機能開発はfeature-*。 - レビュー: Pre-commit フックでチェック(禁止ワード、巨大バイナリ、フォーマット)。Post-commit で CI/CD トリガ。
- 大容量資産: バイナリは
svn:needs-lock属性やロック運用を活用。差分が効かない形式はむやみに履歴を増やさない運用. - フック例: 署名メッセージ強制、チケットIDリンク、ブランチ命名規約チェック。
- バックアップ:
svnadmin hotcopy/svnadmin dumpの計画実行 + 復元演習。
# pre-commit(例:JIRA チケットID必須)
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
MSG=$($SVNLOOK log -t "$TXN" "$REPOS")
echo "$MSG" | grep -E "[A-Z]+-[0-9]+" >/dev/null || {
echo "コミットメッセージにチケットID(ABC-123 など)が必要です。" 1>&2
exit 1
}
発展(移行・統合・チューニング)
Git 連携(双方向)
git svn を使うと、SVN リポジトリと Git を橋渡しできます(標準レイアウトは --stdlayout)。
# SVN → Git クローン(標準レイアウト)
git svn clone --stdlayout https://example.com/svn/project project-git
cd project-git
git log --oneline
# 作業後、SVNへ反映
git svn dcommit
注意:巨大履歴の取り込みは時間がかかる場合があります。初期取り込み時は --no-minimize-url 等のオプション検討。
リポジトリ運用
- FSFS / FSX のストレージ、フックの設計、HTTP/HTTPS(
mod_dav_svn)とsvnserveの使い分け。 - 高可用:リバースプロキシ+読み取りレプリカ、バックアップの世代管理。
- パフォーマンス:差分アルゴリズム・圧縮、フックの外部化、巨大コミットの分割。
(SVN)Subversion VS Git(特性比較)
結論:分散協調やローカル履歴・ブランチ運用の柔軟性は Git、集中管理・一元統制や巨大バイナリのロック運用は SVN が得意。
| 観点 | SVN | Git |
|---|---|---|
| アーキテクチャ | 集中型。中央の単一履歴(権限/監査が単純) | 分散型。各ローカルに完全履歴(オフライン強い) |
| ブランチ/タグ | コピーで軽量、タグは慣例的に不変 | 軽量ブランチ多数が前提、タグは不可変 |
| 大容量バイナリ | ロック前提の運用が容易(svn:needs-lock) |
LFS 等の追加仕組みが必要 |
| 履歴操作 | 書換えが抑制的(監査に向く) | リベース/履歴整形が容易(柔軟) |
| ネットワーク | 常時接続が前提になりやすい | ローカルで完結しやすい(高速) |
| 他ツール連携 | 既存の資産・ツールが豊富(レガシー互換) | 最新エコシステムが広い(CI/CD, PR文化) |
🔗 補足読書:Perforceの比較記事、Nulabの比較解説、git-svn ドキュメント等。
関連リンク
- Apache Subversion 公式サイト
- Download(LTS 1.14 系)
- Release Notes / History
- Quick Start
- Packages(各OSの配布)
- Git公式: git-svn
このページについて(コピーライト等)
© 2026 Programming Lab. 本ページは学習用途のサンプルです。記載のコマンドは検証環境でお試しください。