Linux svn コマンド
SVN(Subversion)は、ファイルとディレクトリの変更履歴を管理するためのオープンソースのバージョン管理システムです。開発チームがプロジェクトを共同開発し、コードの変更を追跡し、バージョンのロールバックをサポートします。
類推で理解する:SVN はタイムマシンのようなもので、プロジェクト内の各ファイルのすべての変更を記録できます。ゲームのセーブポイントのように、いつでも以前の任意のバージョンに戻ることができます。
SVN の基本概念
リポジトリ(Repository)
SVN リポジトリは、すべてのバージョンデータを保存する場所であり、中央データベースに相当します。プロジェクトの完全な履歴が保存されます。
作業コピー(Working Copy)
これはローカルマシン上のプロジェクトのコピーです。ここで変更を加え、その変更をリポジトリにコミットできます。
リビジョン番号(Revision)
コミットのたびにグローバルに一意なリビジョン番号が生成され、プロジェクトの特定の状態を識別します。
SVN のインストールと設定
SVN のインストール
ほとんどの Linux ディストリビューションでは、パッケージマネージャーを使用してインストールできます:
例
sudo apt-get install subversion
# CentOS/RHEL
sudo yum install subversion
# Fedora
sudo dnf install subversion
インストールの確認
svn --version
よく使う SVN コマンドの詳細
コードのチェックアウト(Checkout)
SVN リポジトリからコードをローカルに取得します:
例
# 例:
svn checkout http://svn.example.com/svn/project/trunk myproject
よく使うオプション:
--username:ユーザー名を指定--password:パスワードを指定--non-interactive:非対話モード
コードの更新(Update)
ローカルの作業コピーをリポジトリの最新バージョンと同期します:
例
# 特定のバージョンに更新
svn update -r 1234
変更のコミット(Commit)
ローカルの変更をリポジトリにコミットします:
svn commit -m "提交说明"
ステータスの確認(Status)
作業コピーの変更ステータスを確認します:
svn status
ステータスフラグの説明:
A:追加されたファイルM:変更されたファイルD:削除されたファイル?:バージョン管理されていないファイル!:紛失したファイル
ファイルの追加(Add)
新しいファイルをバージョン管理に追加します:
例
# 現在のディレクトリ内のすべての新しいファイルを追加
svn add --force .
ファイルの削除(Delete)
バージョン管理からファイルを削除します:
svn delete 文件名
ログの表示(Log)
コミット履歴を表示します:
例
# 特定のファイルのログを表示
svn logファイル名
# 表示件数を制限
svn log -l 10
差分の比較(Diff)
変更内容を表示します:
例
svn diff
# 2つのバージョンを比較
svn diff -r 100:200
変更の取り消し(Revert)
ローカルの変更を破棄します:
例
# すべての変更を取り消し
svn revert -R .
競合の解決(Resolve)
複数の人が同じファイルを変更すると競合が発生する可能性があります:
例
svn status
# 競合を解決したら解決済みとしてマーク
svn resolve --acceptworking 競合ファイル
上級操作
ブランチとマージ
例
svn copyソースURL ターゲットURL-m "ブランチ作成の説明"
# ブランチをマージ
svn mergeソースURL[@リビジョン]作業コピーパス
タグ管理
例
svn copy http://svn.example.com/svn/project/trunk
http://svn.example.com/svn/project/tags/1.0
-m "1.0バージョンのタグを作成"
プロパティ管理
例
svn propset svn:keywords "Date Rev Author"ファイル名
# プロパティを表示
svn propgetsvn:keywords ファイル名
実用的なテクニック
-
ファイルの無視:作成
svn:ignoreプロパティを使用してバージョン管理が不要なファイルを除外するsvn propset svn:ignore "*.log" .
-
ファイルの詳細情報を表示:
svn info 文件名
-
クリーンなコピーをエクスポート(.svn ディレクトリを含まない):
svn export 仓库URL 本地目录
-
作業コピーのクリーンアップ:
svn cleanup
よくある問題の解決
認証失敗
例
rm -rf ~/.subversion/auth/
作業コピーのロック
svn cleanup
競合解決の流れ
- 作業コピーを更新:
svn update - 手動で競合を解決(ファイルを編集)
- 解決済みとしてマーク:
svn resolve --accept working 文件名 - 変更をコミット:
svn commit -m "解决冲突"
ベストプラクティス
- コミット前に作業コピーを更新する
- 意味のあるコミットメッセージを書く
- 一度に大量の変更をコミットするのではなく、小さな変更を頻繁にコミットする
- 機能開発にはブランチを使用する
- リポジトリを定期的にバックアップする
SVN と Git の比較
| 特性 | SVN | Git |
|---|---|---|
| アーキテクチャ | 集中型 | 分散型 |
| 速度 | 比較的遅い | 比較的速い |
| ブランチ/マージ | 比較的複雑 | シンプルで効率的 |
| オフライン作業 | 限定的なサポート | 完全なサポート |
| 学習曲線 | 比較的緩やか | 比較的急 |
まとめ
SVN は、強力で安定したバージョン管理システムであり、厳格な権限制御と集中管理が必要なプロジェクトに特に適しています。これらの基本コマンドと概念を習得することで、日常のバージョン管理作業で SVN を効率的に使用できるようになります。バージョン管理の核心は、頻繁なコミットと優れたコミット習慣であることを忘れないでください。それがプロジェクト開発に信頼できるセーフティネットを提供します。
その他の拡張
Linux コマンド大全