
SVNリポジトリをgit cloneする完全ガイド【git svn clone 全オプション解説 2026年版】
SVNリポジトリを引き続き使いながら、手元ではgitのコマンドで作業したい——そんなニーズに答えるのが git svn コマンドです。
このガイドでは、SVNリポジトリを git svn clone でローカルに取り込む方法を基本から応用まで体系的に解説します。単に「動く手順」を紹介するだけでなく、各オプションが何をしているか・なぜそのオプションが必要かを丁寧に説明するので、自分の環境に合わせて応用できるようになります。
筆者はSVNからGitへの移行プロジェクトを複数経験しており、本ガイドの手順はLinux / macOS / Windows (Git Bash) 環境で動作確認済みです。

前提条件
このガイドを進める前に、以下の環境・知識が必要です。
- 環境: Linux / macOS / Windows (Git Bash)
- 必要なツール: Git(git-svnサブコマンド含む)、SVNサーバへのネットワーク疎通
- 前提知識: gitの基本操作(clone / commit / branch)、SVNの基本概念(trunk / branches / tags)
# バージョン確認
git --version
# 期待する出力例: git version 2.43.0
git svn --version
# 期待する出力例: git-svn version 2.43.0 (svn 1.14.x)
git-svnが見つからない場合: Ubuntuなら
sudo apt install git-svn、macOSならbrew install git-svnを実行してください。
全体の流れ
このガイドは以下の5ステップで構成されています。
- 基本的なgit svn clone — 5〜30分(リポジトリサイズによる)
- ブランチ・タグを含めたclone(-sオプション) — 5〜30分
- カスタム構成のSVNリポジトリへの対応 — 10分
- 日常的なgit svn操作(dcommit / rebase / branch) — 継続的に使用
- 応用編:大規模リポジトリ・ユーザマッピング

ステップ1: 基本的な git svn clone
SVNのtrunkディレクトリだけをgitリポジトリとして取り込む、最もシンプルなコマンドです。
trunk単体をcloneする
git svn clone http://server/svn/trunk/repo
これにより、repo というディレクトリが作成され、SVNのtrunkの内容がgitリポジトリとして取り込まれます。
コマンドの内部動作:
- SVNサーバに接続し、リビジョン履歴を順番にフェッチする
- 各SVNリビジョンをgit commitに変換する
git-svn-id:という形式でSVNのリビジョン情報をコミットメッセージに埋め込む
# cloneの進捗確認例
$ git svn clone http://server/svn/trunk/repo
Initialized empty Git repository in /home/user/repo/.git/
r1 = abc1234 (refs/remotes/origin/git-svn)
r2 = def5678 (refs/remotes/origin/git-svn)
...
Checked out HEAD:
http://server/svn/trunk/repo r100
cloneが遅い場合: SVNのリビジョン数が多いほど時間がかかります。
--revisionオプションで取り込むリビジョン範囲を限定できます(後述)。

✅ ステップ1完了の確認: cd repo && git log --oneline でコミット履歴が表示されればOKです。
ステップ2: ブランチ・タグを含めたclone(-s オプション)
SVNのブランチやタグも一緒に取り込みたい場合は -s(--stdlayout)オプションを使います。
-s オプションの使い方
git svn clone -s http://server/svn/repo
-s は「SVNの標準ディレクトリ構成(Standard layout)」を前提とするオプションです。具体的には以下の構成を想定します。
http://server/svn/repo/
├── trunk/ ← メインの開発ライン
├── branches/ ← 各ブランチ
└── tags/ ← タグ(リリースポイント)
注意点:
-s オプションを使う場合、URLはリポジトリルート(trunk/ の一つ上のディレクトリ)を指定します。
# 正しい指定(リポジトリルート)
git svn clone -s http://server/svn/repo
# 誤った指定(trunkを直接指定するとブランチ・タグが取れない)
git svn clone -s http://server/svn/repo/trunk # ← NG
cloneした後の確認
cd repo
git branch -a
期待する出力:
* master
remotes/origin/trunk
remotes/origin/branches/feature-x
remotes/origin/tags/v1.0
SVNのブランチが remotes/origin/branches/<name> として、タグが remotes/origin/tags/<name> として取り込まれていることを確認できます。

✅ ステップ2完了の確認: git branch -a でSVNのブランチ・タグが remotes/ 配下に表示されればOKです。
ステップ3: カスタム構成のSVNリポジトリへの対応
-s オプションはSVNの標準レイアウトを前提としています。組織によっては独自の構成でSVNを運用している場合があります。その場合は各パスを明示的に指定します。
–trunk / –branches / –tags オプション
git svn clone \
--trunk=<trunkのパス> \
--tags=<tagsのパス> \
--branches=<branchesのパス> \
<リポジトリURL>
具体例:
SVNリポジトリの構成が以下のような非標準レイアウトの場合:
http://server/svn/project/
├── main/ ← trunkの代わり
├── feature/ ← branchesの代わり
└── release/ ← tagsの代わり
コマンドは次のようになります:
git svn clone \
--trunk=main \
--branches=feature \
--tags=release \
http://server/svn/project
複数のブランチディレクトリがある場合
--branches は複数回指定できます:
git svn clone \
--trunk=trunk \
--branches=branches \
--branches=teams \
--tags=tags \
http://server/svn/repo

✅ ステップ3完了の確認: git branch -a で期待するブランチが取り込まれているか確認してください。
ステップ4: 日常的な git svn 操作
git svn clone が完了したら、日常的な作業は通常のgitコマンドと git svn の専用コマンドを組み合わせて行います。
SVNリポジトリへのpush(dcommit)
ローカルでgit commitした内容をSVNサーバに反映するには git svn dcommit を使います。
# ローカルでの作業
git add modified_file.txt
git commit -m "バグ修正: nullポインタ例外を修正"
# SVNへ反映
git svn dcommit
git push に相当する操作ですが、git push ではなく git svn dcommit を使う必要があります。
重要:
git svn dcommitは、SVNサーバにコミットする際にコミットメッセージを書き換えます(git-svn-id:という行が追加されます)。これは正常な動作です。
SVNから最新の更新を取得(rebase)
SVNサーバの最新変更をローカルに取り込むには git svn rebase を使います。
git svn rebase
これは git pull --rebase に相当する操作です。SVNのリビジョンをフェッチしてリベースします。
fetchだけしたい場合:
git svn fetchでSVNの変更を取り込みつつ、ローカルHEADは動かさないことができます。
SVNブランチの一覧確認
git branch -r
SVNサーバ上のブランチ一覧が表示されます。git svn clone -s や --branches オプションで取り込んだブランチが remotes/origin/branches/<name> 形式で一覧表示されます。
SVNブランチをローカルで作業する
# SVNブランチをローカルブランチとして作成
git branch local-feature-x remotes/origin/branches/feature-x
# ローカルブランチをチェックアウト
git checkout local-feature-x
# 作業してコミット
git add .
git commit -m "feature-xでの作業"
# SVNへ反映
git svn dcommit
# 作業完了後、masterへ戻りローカルブランチを削除
git checkout master
git branch -d local-feature-x
タグの操作
SVNのタグも同様にローカルブランチとして操作できます。ただし、SVNのtagはgitのtagとは異なり、単なる「コピー」として実装されています。
# タグの確認
git branch -r | grep tags
# タグをgit tagとして作成
git tag v1.0 remotes/origin/tags/v1.0

応用編
大規模リポジトリ:特定リビジョンからclone
SVNの歴史が長く、数千〜数万リビジョンあるリポジトリでは、全履歴を取り込むと非常に時間がかかります。直近のリビジョンからのみcloneする方法:
# リビジョン1000以降のみ取り込む
git svn clone -r 1000:HEAD http://server/svn/trunk/repo
この方法では取り込めないリビジョンの履歴は失われますが、ブランチ作業やdcommitは問題なく行えます。
ユーザマッピング(SVN作者 → Gitコミッター)
SVNのコミットユーザ名をGitのコミッター(名前+メールアドレス)にマッピングできます。
# authors.txt を作成
cat > authors.txt << 'EOF'
tanaka = 田中太郎 <tanaka@example.com>
yamada = 山田花子 <yamada@example.com>
EOF
# authorsファイルを指定してclone
git svn clone -A authors.txt http://server/svn/trunk/repo
このマッピングを行わないと、SVNのユーザ名がそのままgitのコミッターとして記録されます。
git svn fetch で段階的に更新
git svn clone は初回に全リビジョンを取り込みますが、その後の更新は git svn fetch で増分だけ取り込めます。
# 最新リビジョンまでフェッチ
git svn fetch
# フェッチ後にrebaseを別途実行
git svn rebase
完全移行:svn2git を使ったSVN→Git完全移行
長期的にはSVNリポジトリをGitに完全移行することを推奨します。git svn はブリッジ手段であり、完全移行には svn2git コマンドが便利です。
# svn2gitのインストール(Ubuntu)
sudo apt install git-svn ruby rubygems
sudo gem install svn2git
# 完全移行
svn2git http://server/svn/repo
svn2git は内部で git svn を使い、タグをgitのtagに、ブランチをgitのbranchに正しく変換します。
トラブルシュート
| 症状 | 原因 | 解決策 |
|---|---|---|
git svn コマンドが見つからない |
git-svnがインストールされていない | sudo apt install git-svn または brew install git-svn |
| cloneが非常に遅い | SVNのリビジョン数が多い | -r HEAD:HEAD または -r <最新数千>:HEAD で絞り込む |
| ブランチが取り込まれない | リポジトリURLが誤っているか -s の対象構成でない | --trunk / --branches / --tags で明示指定する |
dcommit で “Cannot commit to a directory path" エラー |
ブランチの向き先が誤っている | git svn info で現在の追跡先を確認する |
| 認証エラー(401 Unauthorized) | SVNサーバへの認証情報が不正 | git svn clone --username=<user> で明示指定する |
| 文字化けする | SVNとgitのエンコーディング差異 | git config svn.pathnameencoding UTF-8 を設定する |
まとめ
このガイドでは git svn clone を使ってSVNリポジトリをgitで操作する方法を解説しました。
- ステップ1:
git svn clone <URL>でtrunkのみを取り込む基本操作 - ステップ2:
-sオプションでブランチ・タグも含めた標準レイアウトのclone - ステップ3:
--trunk/--branches/--tagsで非標準レイアウトに対応 - ステップ4:
git svn dcommit(push)とgit svn rebase(pull)による日常操作
git svn はSVNからgitへの移行を段階的に進める際の強力なブリッジです。まずは手元の環境で git svn clone を試し、gitの快適なブランチ操作やローカルコミットをSVN環境でも活用してみてください。
次のステップとして、チーム全体をGitに移行する場合は svn2git を使った完全移行もぜひ検討してください。

