SVNとは?Gitとの違いとsvnコマンドの基本操作を初心者向けに解説

コマンドリファレンス

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は動作しません。

項目TortoiseSVNsvnコマンド(CLI)
OSWindowsのみ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 を実行してください。

関連コマンド

  • git : 分散型バージョン管理システム。現在の主流で、SVNとよく比較される。
  • svnadmin : Subversion リポジトリをサーバー側で管理するためのコマンド。

備考

  • Subversion は 集中型バージョン管理システムで、サーバー上のリポジトリを中心に管理します。
  • ブランチやタグは copy サブコマンドで作成するのが特徴です。
  • Git のような分散型とは異なり、常に中央リポジトリと通信する必要があります。
  • LinuxでSVNをインストールするには sudo apt install subversion(Debian/Ubuntu系)または sudo yum install subversion(RHEL系)を実行します。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント