Linux svn コマンド

Linux 命令大全Linux コマンド大全


SVN(Subversion)は、ファイルとディレクトリの変更履歴を管理するためのオープンソースのバージョン管理システムです。開発チームがプロジェクトを共同開発し、コードの変更を追跡し、バージョンのロールバックをサポートします。

類推で理解する:SVN はタイムマシンのようなもので、プロジェクト内の各ファイルのすべての変更を記録できます。ゲームのセーブポイントのように、いつでも以前の任意のバージョンに戻ることができます。


SVN の基本概念

リポジトリ(Repository)

SVN リポジトリは、すべてのバージョンデータを保存する場所であり、中央データベースに相当します。プロジェクトの完全な履歴が保存されます。

作業コピー(Working Copy)

これはローカルマシン上のプロジェクトのコピーです。ここで変更を加え、その変更をリポジトリにコミットできます。

リビジョン番号(Revision)

コミットのたびにグローバルに一意なリビジョン番号が生成され、プロジェクトの特定の状態を識別します。


SVN のインストールと設定

SVN のインストール

ほとんどの Linux ディストリビューションでは、パッケージマネージャーを使用してインストールできます:

例

# Ubuntu/Debian
sudo apt-get install subversion

# CentOS/RHEL
sudo yum install subversion

# Fedora
sudo dnf install subversion

インストールの確認

svn --version

よく使う SVN コマンドの詳細

コードのチェックアウト(Checkout)

SVN リポジトリからコードをローカルに取得します:

例

svn checkout [リポジトリURL] [ローカルディレクトリ]
# 例:
svn checkout http://svn.example.com/svn/project/trunk myproject

よく使うオプション:

  • --username:ユーザー名を指定
  • --password:パスワードを指定
  • --non-interactive:非対話モード

コードの更新(Update)

ローカルの作業コピーをリポジトリの最新バージョンと同期します:

例

svn update
# 特定のバージョンに更新
svn update -r 1234

変更のコミット(Commit)

ローカルの変更をリポジトリにコミットします:

svn commit -m "提交说明"

ステータスの確認(Status)

作業コピーの変更ステータスを確認します:

svn status

ステータスフラグの説明:

  • A:追加されたファイル
  • M:変更されたファイル
  • D:削除されたファイル
  • ?:バージョン管理されていないファイル
  • !:紛失したファイル

ファイルの追加(Add)

新しいファイルをバージョン管理に追加します:

例

svn addファイル名
# 現在のディレクトリ内のすべての新しいファイルを追加
svn add --force .

ファイルの削除(Delete)

バージョン管理からファイルを削除します:

svn delete 文件名

ログの表示(Log)

コミット履歴を表示します:

例

svn log
# 特定のファイルのログを表示
svn logファイル名
# 表示件数を制限
svn log -l 10

差分の比較(Diff)

変更内容を表示します:

例

# 作業コピーと基本バージョンを比較
svn diff
# 2つのバージョンを比較
svn diff -r 100:200

変更の取り消し(Revert)

ローカルの変更を破棄します:

例

svn 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 ファイル名

実用的なテクニック

  1. ファイルの無視:作成svn:ignoreプロパティを使用してバージョン管理が不要なファイルを除外する

    svn propset svn:ignore "*.log" .
  2. ファイルの詳細情報を表示:

    svn info 文件名
  3. クリーンなコピーをエクスポート(.svn ディレクトリを含まない):

    svn export 仓库URL 本地目录
  4. 作業コピーのクリーンアップ:

    svn cleanup

よくある問題の解決

認証失敗

例

# 保存されている認証情報を削除
rm -rf ~/.subversion/auth/

作業コピーのロック

svn cleanup

競合解決の流れ

  1. 作業コピーを更新:svn update
  2. 手動で競合を解決(ファイルを編集)
  3. 解決済みとしてマーク:svn resolve --accept working 文件名
  4. 変更をコミット:svn commit -m "解决冲突"

ベストプラクティス

  1. コミット前に作業コピーを更新する
  2. 意味のあるコミットメッセージを書く
  3. 一度に大量の変更をコミットするのではなく、小さな変更を頻繁にコミットする
  4. 機能開発にはブランチを使用する
  5. リポジトリを定期的にバックアップする

SVN と Git の比較

特性 SVN Git
アーキテクチャ 集中型 分散型
速度 比較的遅い 比較的速い
ブランチ/マージ 比較的複雑 シンプルで効率的
オフライン作業 限定的なサポート 完全なサポート
学習曲線 比較的緩やか 比較的急

まとめ

SVN は、強力で安定したバージョン管理システムであり、厳格な権限制御と集中管理が必要なプロジェクトに特に適しています。これらの基本コマンドと概念を習得することで、日常のバージョン管理作業で SVN を効率的に使用できるようになります。バージョン管理の核心は、頻繁なコミットと優れたコミット習慣であることを忘れないでください。それがプロジェクト開発に信頼できるセーフティネットを提供します。


Linux 命令大全Linux コマンド大全

その他の拡張