SVNの基礎
Subversion(SVN)は、現在も多くの現場で使われているバージョン管理システムです。特に大企業やレガシーシステムの現場では、Gitではなく SVNを使っていることも珍しくありません。
SVNとは
特徴
SVNは「集中型」のバージョン管理システムです。
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上のファイルです。
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の比較 も参照してください。