svnadmin – Subversionリポジトリを作成・保守する管理ツール

リポジトリ管理

svnadmin は Subversion(SVN)のリポジトリ本体を直接操作する管理者向けコマンドです。新規作成、バックアップ(dump/hotcopy)、検査(verify)、修復(recover)、圧縮・最適化(pack/upgrade)などを行います。
実務では、サーバ上でのリポジトリ新設・移行・バックアップ/リストアや、障害発生時の検証・修復に使います。

構文(Syntax)

# 基本形
svnadmin SUBCOMMAND REPO_PATH [OPTIONS...]

# 代表的なサブコマンド
svnadmin create   REPO_PATH [--fs-type fsfs|fsx|bdb] [--compatible VER]
svnadmin hotcopy  SRC_REPO DST_REPO [--clean-logs]
svnadmin dump     REPO_PATH [-r REV[:REV]] [--incremental] [--deltas] > dumpfile
svnadmin load     REPO_PATH [--parent-dir DIR] [--ignore-uuid|--force-uuid]
svnadmin verify   REPO_PATH [-r REV[:REV]] [--keep-going]
svnadmin recover  REPO_PATH
svnadmin pack     REPO_PATH
svnadmin upgrade  REPO_PATH
svnadmin setuuid  REPO_PATH [NEW-UUID]
svnadmin setrevprop REPO_PATH -r REV NAME VALUE [--use-pre-commit-hook --use-post-commit-hook]
svnadmin lstxns   REPO_PATH
svnadmin rmtxns   REPO_PATH TXN...
  • REPO_PATHリポジトリディレクトリ(作業コピーではありません)。
  • 出力リダイレクト(dump > file)やパイプ(dump | gzip)と併用します。

主なオプション一覧

オプション説明使用例
create新しいリポジトリを作成svnadmin create /svn/repos/projectA
--fs-type fsfsFSFS/FSX などのストレージ種別を指定(既定は FSFS 系)svnadmin create /svn/repos --fs-type fsfs
--compatible VER互換性レベルを指定(古いクライアントとの互換保持)svnadmin create /svn/repos --compatible 1.8
hotcopy SRC DSTライブリポジトリから安全に全体コピー(バックアップ)svnadmin hotcopy /svn/repos /backup/repos_2025-09-21
dump -r X[:Y]ダンプを作成。範囲指定や増分(--incremental)対応svnadmin dump /svn/repos -r 0:HEAD > full.dump
dump --incremental直前リビジョンとの差分だけをダンプsvnadmin dump /svn/repos -r 101:HEAD --incremental > inc.dump
dump --deltas差分形式でダンプ(ファイルサイズ節約)svnadmin dump /svn/repos --deltas > repo.dump
loadダンプをリストア(空のリポジトリ推奨)svnadmin load /svn/newrepo < repo.dump
load --parent-dir DIRダンプ内容を DIR/ 配下にロードsvnadmin load /svn/newrepo --parent-dir migrated < repo.dump
load --ignore-uuidロード時に新UUIDを発行svnadmin load /svn/newrepo --ignore-uuid < repo.dump
load --force-uuidダンプのUUIDを強制的に採用svnadmin load /svn/newrepo --force-uuid < repo.dump
verify [-r]破損がないか検査(範囲指定可)svnadmin verify /svn/repos -r 0:HEAD
recover予期せぬ停止後の回復(排他で実施)svnadmin recover /svn/repos
packFSFS のシャードをパックして容量削減svnadmin pack /svn/repos
upgradeリポジトリ形式を最新化(新機能有効化)svnadmin upgrade /svn/repos
setuuidリポジトリUUIDを設定/変更svnadmin setuuid /svn/repos
setrevpropリビジョンプロパティを設定(履歴書換え)svnadmin setrevprop /svn/repos -r 120 svn:log "fix typo"
lstxns / rmtxns未コミットトランザクションの列挙/削除svnadmin rmtxns /svn/repos 3a1-txn

実行例

リポジトリを新規作成して初期コミット

説明:サーバ上に FSFS のリポジトリを作り、初期レイアウトを投入します。
コマンド

# リポジトリ作成
sudo mkdir -p /svn/repos && sudo svnadmin create /svn/repos/projectA
sudo chown -R svn:svn /svn/repos/projectA

# 作業コピーから初期コミット(例: file:// アクセス)
svn checkout file:///svn/repos/projectA /tmp/wc
mkdir -p /tmp/wc/trunk /tmp/wc/branches /tmp/wc/tags
svn add /tmp/wc/*
svn commit -m "Initial layout" /tmp/wc

出力例Committed revision 1.

フルダンプと増分ダンプを取得(バックアップ)

説明:完全ダンプ+直近の差分だけを週次で取得する例。
コマンド

# まずフルダンプ
svnadmin dump /svn/repos/projectA --deltas > /backup/projectA_full.dump

# 以降は増分(例: 101~HEAD)
svnadmin dump /svn/repos/projectA -r 101:HEAD --incremental --deltas \
  | gzip > /backup/projectA_inc_101_HEAD.dump.gz

別環境へリストア(移行)

説明:空のリポジトリへロード。ダンプ側の UUID を維持したい場合は --force-uuid
コマンド

svnadmin create /svn/newrepo/projectA
svnadmin load /svn/newrepo/projectA --force-uuid < /backup/projectA_full.dump

ライブバックアップ(hotcopy)

説明:稼働中でも整合性を保って丸ごとコピーします。
コマンド

svnadmin hotcopy /svn/repos/projectA /backup/projectA_hotcopy_2025-09-21

破損検査と修復

説明:検査でエラーが出た場合、サービス停止の上で recover を実行。
コマンド

svnadmin verify /svn/repos/projectA -r 0:HEAD
# 問題があれば
sudo systemctl stop svnserve   # または Apache を停止
svnadmin recover /svn/repos/projectA

エラー例:作業コピーに対して実行してしまった

説明svnadminリポジトリに対して動かします。作業コピーを指定すると失敗します。
コマンド

svnadmin verify /home/user/workcopy
echo $?

出力例(例)

svnadmin: E160000: '.../workcopy' is not a repository
1

関連コマンド

  • svn:クライアント操作(checkout/commit/merge 等)。
  • svnserve / mod_dav_svn:SVN サーバ(独立デーモン / Apache モジュール)。
  • svnlook:リポジトリ内容を読み取り専用で覗く管理ツール。
  • svnsync:リポジトリ間のミラーリング
  • svndumpfilter:ダンプからパスを抽出/除外して再構成。
  • svnversion:作業コピーの混在リビジョンを表示。

備考

  • どこで実行するかsvnadmin は**サーバ側(リポジトリがあるホスト)**で実行します。NFS 等のリモートFS上のリポジトリ操作は推奨されません。
  • 権限:リポジトリディレクトリの所有者/パーミッションに注意。サーバプロセス(例:svn ユーザー)と権限を合わせておくと事故を防げます。
  • ストレージ種別:現在は FSFS/FSX が一般的。BDB は旧来・非推奨(古い環境のみ)。
  • オンライン/オフラインdumphotcopyオンラインで安全に取得可能。recoverupgrade排他が必要です。
  • UUID/履歴書換えsetuuidsetrevprop は慎重に。ミラーやクライアントのキャッシュへ影響します(運用ルールを決め、監査ログを残しましょう)。
  • 設定ファイルcreate 直後に REPO_PATH/conf/svnserve.conf, passwd, authz 等)が生成されます。公開方法(svnserve/Apache)に応じて設定します。

参考

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント