SVNの基礎
Subversion(SVN)は、現在も多くの現場で使われているバージョン管理システムです。特に大企業やレガシーシステムの現場では、Gitではなく SVNを使っていることも珍しくありません。
なぜSVNを理解する必要があるか
SVNは現場を選ぶバージョン管理システム
「Gitが主流」と言われる時代でも、SVNはまだ多くの現場で使われています。
- 大企業やSIer(システムインテグレーション企業)
- レガシーシステムの保守現場
- 金融機関や公共機関などの堅実性重視の現場
最初の配属先でSVNだった場合、「Gitと同じようにやればいい」では失敗します。SVNとGitは 設計思想が異なる ため、操作や考え方が大きく違います。
SVN特有のルールを知ることが生き残りの鍵
以下のようなSVN特有の問題を避けるためには、基本を理解する必要があります。
- 「commitしたら即座に全員に公開される」という焦り
- 「衝突が起きたら大変」というパニック
- 「ブランチが重い操作」であることの戸惑い
GitとSVNの比較 も合わせて読むと、違いが明確になります。
SVNとは
特徴:集中型のバージョン管理システム
SVNは「集中型」のバージョン管理システムです。つまり、「中央に1つのリポジトリがあって、全員がそこにアクセス」する方式です。
flowchart TB
subgraph サーバー
R[(リポジトリ)]
end
A[開発者A] --> R
B[開発者B] --> R
C[開発者C] --> R
- 中央に1つのリポジトリがあり、全員がそこにアクセス
- 履歴は全てサーバー側に保存
- オフラインでは履歴確認やコミットができない
Gitとの詳しい違いについては GitとSVNの比較 を参照してください。
最低限理解すべき概念
リポジトリ構成
SVNでは、以下の3つのディレクトリ構成が一般的です。
repository/ ├── trunk/ ← メインの開発ライン(Gitのmainに相当) ├── branches/ ← ブランチ(機能開発用など) └── tags/ ← リリース版のスナップショット
ポイント:
trunkで通常の開発を行う- 大きな機能開発は
branchesで行う - リリース時に
tagsにコピーを作る
作業コピー(Working Copy)
サーバーからチェックアウトした、自分のPC上のファイルです。Gitのローカルリポジトリとは違い、履歴は含まれません。
flowchart LR
A[(リポジトリ)] -->|checkout| B[作業コピー]
B -->|commit| A
A -->|update| B
- ローカルリポジトリとは異なり、履歴は含まれない
- 編集して、サーバーにコミットする
リビジョン(Revision)
コミットごとに付与される連番の番号です。
r1 → r2 → r3 → r4 → r5 → ...
- シンプルな連番で管理される
- 「r100に戻して」のように番号で指定できる
- リポジトリ全体で共有される(ファイル単位ではない)
基本操作
よく使うコマンド
| コマンド | 説明 |
|---|---|
svn checkout | リポジトリから作業コピーを取得 |
svn update | 最新の変更を取得 |
svn add | 新しいファイルをバージョン管理に追加 |
svn commit | 変更をサーバーに送信 |
svn status | 変更状態を確認 |
svn diff | 差分を確認 |
svn log | 履歴を確認 |
svn revert | 変更を取り消す |
基本的な作業フロー
# 1. 最新を取得
svn update
# 2. ファイルを編集
# (エディタで編集)
# 3. 状態を確認
svn status
# 4. 差分を確認
svn diff
# 5. コミット
svn commit -m "機能Aを追加"
新しいファイルを追加する
# 1. ファイルを作成
# (エディタで作成)
# 2. バージョン管理に追加
svn add newfile.txt
# 3. コミット
svn commit -m "新しいファイルを追加"
ファイルを削除する
# 1. バージョン管理から削除
svn delete oldfile.txt
# 2. コミット
svn commit -m "不要なファイルを削除"
ブランチ操作
SVNのブランチ
SVNではブランチは「ディレクトリのコピー」として実現されます。
# ブランチを作成
svn copy http://svn.example.com/repo/trunk \
http://svn.example.com/repo/branches/feature-a \
-m "feature-aブランチを作成"
# ブランチに切り替え
svn switch http://svn.example.com/repo/branches/feature-a
注意
- ブランチ作成は比較的重い操作
- 頻繁にブランチを切る文化は少ない
- 現場によってはtrunk直接作業も多い
1年目でよくある失敗
失敗1:updateせずにcommit
他の人の変更と衝突(conflict)が起きます。
# 必ずupdateしてからcommit
svn update
# 衝突がないことを確認
svn commit -m "変更内容"
失敗2:衝突(Conflict)でパニック
同じファイルを複数人が編集すると衝突が起きます。
<<<<<<< .mine
自分の変更
=======
他の人の変更
>>>>>>> .r123
対処法:
- 両方の変更を確認
- 正しい内容に編集
svn resolved ファイル名で解決を宣言- コミット
分からなければ先輩に相談してください。
失敗3:コミットメッセージが雑
分かりやすいメッセージを書くことが重要です。
# 良い例
svn commit -m "[add] ログイン機能を追加"
# 避けたい例
svn commit -m "修正"
失敗4:間違えてcommitしてしまった
SVNでは、一度commitすると取り消しが難しいです。
- 過去のリビジョンに戻すには
svn mergeを使う - 間違えたら、すぐに先輩に相談
GUIツールを活用しよう
実際の現場では、コマンドラインよりGUIツールを使うことが多いです。SVNの現場ではTortoiseSVNが圧倒的に主流です。
TortoiseSVN(Windows定番)
Windowsのエクスプローラーに統合されるツールで、SVNの現場ではほぼ必須といえます。
- 右クリックメニューで全ての操作ができる
- ファイルの状態がアイコンで表示される(緑=変更なし、赤=変更あり)
- 差分表示、履歴確認も視覚的に分かりやすい
- 無料で利用可能
詳しい使い方は「TortoiseSVN 使い方」で検索すると解説サイトが多数あります。
その他のツール
| ツール | 特徴 |
|---|---|
| Cornerstone | Mac向け、有料だが使いやすい |
| IDE内蔵 | Eclipse、IntelliJなどに統合されている |
コマンドラインは覚えなくていい?
TortoiseSVNがあれば、コマンドラインを覚える必要はほぼありません。ただし、何が起きているかを理解することは重要です。上記のコマンド説明は「TortoiseSVNで何をしているか」を理解するための参考にしてください。
SVNの現場で気をつけること
trunkへの直接コミットが多い
ブランチを切らずにtrunkで作業することが多いです。
- こまめにupdateする習慣が重要
- 大きな変更は事前に相談
- 複数人で同じファイルを触る場合は声をかけ合う
ロック機能
バイナリファイル(Excel、画像など)は、同時編集を防ぐため「ロック」を使うことがあります。
# ロックを取得
svn lock file.xlsx
# 編集後、コミット(ロックは自動解除)
svn commit -m "Excel更新"
# または明示的にロック解除
svn unlock file.xlsx
サーバーへの依存
オフラインでは履歴確認やコミットができません。
- ネットワーク環境を確認
- VPN接続が必要な場合も
まとめ
SVNで理解しておくべきポイント:
- 集中型:リポジトリは中央に1つ
- updateを忘れずに:コミット前に必ず最新を取得
- リビジョン番号で履歴を管理
- 衝突は落ち着いて対処(分からなければ相談)
- commitは慎重に(取り消しが難しい)
GitとSVNの違いについては GitとSVNの比較 も参照してください。