SVN(Subversion)は、ファイルの変更履歴を管理する集中型バージョン管理システムです。
複数人での開発において、誰がいつ何を変更したかを追跡し、過去のバージョンに戻せるようにするために使われます。
Linuxでは svn コマンドを使ってリポジトリを操作します。
SVNとは?SubversionとSVNの関係
Subversion(アパッチ・サブバージョン)は、Apache Software Foundationが開発・管理するオープンソースのバージョン管理システムです。その略称が「SVN」であり、クライアントコマンドの名前も svn になっています。
2000年代にCVS(Concurrent Versions System)の後継として広く普及し、現在でも企業の業務システムや官公庁のプロジェクトを中心に現役で使われています。
GitとSVNの違い
SVNとGitの最大の違いは、集中型か分散型かという点です。
| 項目 | SVN(集中型) | Git(分散型) |
|---|---|---|
| リポジトリの場所 | サーバー1箇所に集中 | 各開発者のローカルにも存在 |
| オフライン作業 | サーバーに接続が必要 | ローカルで完結できる |
| コミット先 | 即座にサーバーへ反映 | まずローカルにコミット |
| ブランチ | ディレクトリのコピーで実現 | 軽量で高速 |
| 履歴管理 | リビジョン番号(r1, r2…) | コミットハッシュ(SHA-1) |
| アクセス制御 | ディレクトリ単位で設定しやすい | リポジトリ単位が基本 |
中央集権型(SVN)の仕組み
SVNでは、すべての変更履歴が中央サーバーのリポジトリに蓄積されます。開発者はサーバーから作業コピーをチェックアウトし、変更したらサーバーへコミットします。
サーバー(リポジトリ)
↕ checkout / commit
開発者A 開発者B 開発者C
分散型(Git)の仕組み
Gitでは、各開発者がリポジトリの完全なコピーをローカルに持ちます。ローカルでコミットを積み重ねてから、リモートリポジトリにプッシュします。
リモートリポジトリ(GitHub等)
↕ push / pull
開発者Aのローカルリポジトリ 開発者Bのローカルリポジトリ
SVNが今でも使われる場面
Gitが主流となった現在でも、SVNは以下のような場面で現役で使われています。
- 企業・官公庁の既存システム:2000年代〜2010年代に構築したシステムがSVNを前提にしており、移行コストを考えてSVNを継続使用
- ディレクトリ単位のアクセス制御が必要な場面:SVNはリポジトリ内のディレクトリごとにアクセス権を細かく設定できる
- 大きなバイナリファイルの管理:SVNは巨大なバイナリファイルの扱いが得意で、デザインファイルや動画を含むプロジェクトで使われることがある
- シンプルな単一サーバー運用:分散型の概念が不要なチームでは、SVNのほうが管理がシンプル
TortoiseSVNとsvnコマンドの違い
TortoiseSVNはWindows向けのGUIクライアントで、エクスプローラーのコンテキストメニューからSVN操作ができます。Windowsユーザーには馴染みやすい反面、Linux/Mac環境ではTortoiseSVNは動作しません。
| 項目 | TortoiseSVN | svnコマンド(CLI) |
|---|---|---|
| OS | Windowsのみ | Linux / Mac / Windows |
| 操作方法 | GUI(右クリックメニュー) | ターミナルでコマンド入力 |
| スクリプト化 | 不可 | シェルスクリプトに組み込める |
| 対象ユーザー | 非エンジニアも含む | エンジニア・CLI操作に慣れた人 |
Linuxサーバーの管理やCI/CDパイプラインへの組み込みには、svn コマンドが必要です。
構文(Syntax)
svn <サブコマンド> [オプション] [対象...]
基本コマンド一覧
| サブコマンド | 説明 | 使用例 |
|---|---|---|
checkout / co | リポジトリから作業コピーを取得 | svn checkout https://example.com/svn/project/trunk |
update / up | 作業コピーを最新に更新 | svn update |
add | 新しいファイルを追加対象にする | svn add newfile.txt |
commit / ci | 変更をリポジトリに反映 | svn commit -m "Fix bug" |
status / st | 作業コピーの変更状況を表示 | svn status |
diff | 差分を表示 | svn diff |
log | コミット履歴を表示 | svn log |
revert | ローカルの変更を破棄 | svn revert file.txt |
delete / rm | ファイルやディレクトリを削除 | svn delete oldfile.txt |
info | ファイルやリポジトリの詳細情報を表示 | svn info |
merge | 他ブランチの変更を統合 | svn merge ^/branches/feature-x |
switch | 作業コピーを別のブランチに切り替え | svn switch ^/branches/feature-x |
各コマンドの説明と実行例
svn checkout:リポジトリを取得する
リポジトリURLを指定して、ローカルに作業コピーを取得します。Gitの git clone に相当する操作です。
svn checkout https://example.com/svn/project/trunk myproject
svn update:最新状態に更新する
他の開発者がコミットした変更を作業コピーに取り込みます。Gitの git pull に近い操作です。
svn update
出力例:
Updating '.':
U src/main.py
At revision 106.
svn status:変更状況を確認する
作業コピーのファイルごとの状態を表示します。コミット前に必ず確認しましょう。
svn status
出力例:
M src/main.py
? tmp/debug.log
A docs/readme.txt
主なステータス記号:
| 記号 | 意味 |
|---|---|
M | 変更済み(Modified) |
A | 追加予定(Added) |
D | 削除予定(Deleted) |
? | バージョン管理外のファイル |
C | コンフリクトあり(Conflicted) |
svn add:ファイルを追加する
新規作成したファイルをバージョン管理対象に追加します。svn add を実行しないとコミットされません。
svn add newfile.txt
svn commit:変更をコミットする
作業コピーの変更をサーバーのリポジトリに反映します。-m でコミットメッセージを指定します。
svn commit -m "Add new feature"
svn diff:差分を確認する
ローカルの変更内容をコミット前に確認できます。
svn diff src/main.py
svn log:コミット履歴を確認する
リポジトリのコミット履歴を新しい順に表示します。-l で件数を指定できます。
svn log -l 5
出力例:
r105 | alice | 2025-08-27 | Fix security issue
r104 | bob | 2025-08-26 | Add new feature
...
よくある作業フロー
1. リポジトリを取得する(初回)
svn checkout https://example.com/svn/project/trunk myproject
cd myproject
2. 最新状態に更新する
svn update
3. 変更内容を確認する
# 変更一覧を確認
svn status
# 変更の詳細を確認
svn diff
4. ファイルを追加する(新規ファイルの場合)
svn add newfile.txt
5. 変更をコミットする
svn commit -m "コミットメッセージをここに記述"
ローカル変更を取り消す
svn revert app.py
ブランチを作成する
svn copy ^/trunk ^/branches/feature-x -m "Create feature branch"
ブランチに切り替える
svn switch ^/branches/feature-x
よくある疑問
SVNとGitはどちらを使うべきか?
新規プロジェクトであればGitを選ぶのが標準です。GitHubやGitLabとの連携、ブランチ操作の柔軟性、オフライン作業の容易さなど、現代の開発スタイルに適しています。
SVNを選ぶ理由があるとすれば、既存のSVNリポジトリとの連携が必要な場合や、ディレクトリ単位のアクセス制御が必須の場合です。
SVNは古いのか?
Gitと比べると技術的に古い設計ですが、「古いから使えない」ということはありません。Apache Subversionは現在も活発にメンテナンスされており、企業環境では今も広く使われています。レガシーシステムや特定の要件では、SVNのほうが適切な選択肢になることがあります。
TortoiseSVNとsvnコマンドは何が違うのか?
どちらもSVNリポジトリを操作するクライアントツールですが、TortoiseSVNはWindows専用のGUIツール、svn はLinux/Mac/Windowsのターミナルで動作するCLIツールです。Linuxサーバー上での作業やスクリプトへの組み込みには svn コマンドが必要です。
checkoutとupdateの違いは?
checkout はリポジトリから作業コピーを初めて取得するときに使います(初回のみ)。update は既存の作業コピーを最新状態に同期するときに使います(2回目以降)。
commitする前に確認すべきことは?
svn status で変更ファイルの一覧を確認し、svn diff で変更内容を確認してからコミットするのがおすすめです。また、新規作成したファイルは svn add を忘れずに実行しないとコミットに含まれません。
エラー例:未バージョン管理のファイルをコミットしようとした場合
svn commit newfile.txt -m "test"
出力例:
svn: E200009: 'newfile.txt' is not under version control
このエラーが出た場合は、先に svn add newfile.txt を実行してください。
関連コマンド
備考
- Subversion は 集中型バージョン管理システムで、サーバー上のリポジトリを中心に管理します。
- ブランチやタグは
copyサブコマンドで作成するのが特徴です。 - Git のような分散型とは異なり、常に中央リポジトリと通信する必要があります。
- LinuxでSVNをインストールするには
sudo apt install subversion(Debian/Ubuntu系)またはsudo yum install subversion(RHEL系)を実行します。
参考
- Subversion公式ドキュメント: https://subversion.apache.org/docs/
- Subversion Book(日本語版あり): https://svnbook.red-bean.com/

コメント