svn export コマンド完全ガイド:初心者でも簡単!使い方から実践例まで
Subversion(SVN)は、ソフトウェア開発において広く利用されているバージョン管理システムです。その中でも svn export コマンドは、バージョン管理されたリポジトリから特定のファイルやディレクトリを、バージョン管理情報を 含めずに 抽出するための重要なツールです。この記事では、svn export コマンドの基本から応用までを網羅的に解説し、初心者の方でも簡単に使いこなせるようになることを目指します。
1. はじめに:svn exportとは?
svn export コマンドは、SVNリポジトリから、指定されたパスにあるファイルやディレクトリをローカルの作業ディレクトリにコピーする際に使用します。通常の svn checkout コマンドとは異なり、svn export では .svn ディレクトリなどのバージョン管理情報はコピーされません。これにより、リポジトリ内の特定のバージョンを、ビルドや配布などの目的でクリーンな状態で取り出すことができます。
1.1 なぜ svn export を使うのか?
- クリーンな配布: バージョン管理情報を含まないため、配布パッケージを生成する際に不要なメタデータを省けます。
- ビルド環境の準備: リポジトリからソースコードを取得し、コンパイルやテストを行う環境を準備する際に、バージョン管理情報を除外することで、よりシンプルな構成にできます。
- 特定のバージョンの取得: 過去の特定のリビジョンのファイルやディレクトリを、現在の作業ディレクトリに影響を与えることなく取得できます。
- スクリプト処理: 自動化されたスクリプトで、特定のリビジョンを簡単に取得し、他の処理に組み込むことができます。
1.2 svn exportとsvn checkoutの違い
svn export と svn checkout はどちらもリポジトリからファイルを取得するコマンドですが、その目的と結果は大きく異なります。
| 機能 | svn export | svn checkout |
|---|---|---|
| 目的 | リポジトリからファイル/ディレクトリをクリーンに抽出 | 作業コピーを作成し、バージョン管理下で作業を行う |
| .svnフォルダ | 生成されない | 生成される |
| バージョン管理 | 対象外 | 対象 |
| 用途 | 配布、ビルド、特定のバージョンの取得 | ソースコードの編集、コミット、更新 |
svn checkout は、リポジトリとローカルの作業コピーを接続し、変更の追跡と同期を可能にします。一方、svn export は、特定の時点の状態を静的に取り出すことに特化しています。
2. svn exportの基本的な使い方
svn export コマンドの基本的な構文は以下の通りです。
bash
svn export [OPTIONS] URL[@REV] [PATH]
各要素の意味は以下の通りです。
OPTIONS: コマンドの挙動を制御するオプション(後述)。URL: エクスポートするリポジトリのURL。@REV: エクスポートするリビジョン番号(省略可能)。省略した場合、HEADリビジョン(最新リビジョン)が使用されます。PATH: エクスポート先のローカルディレクトリ(省略可能)。省略した場合、URLの最後の部分がディレクトリ名として使用されます。
2.1 基本的なexportの例
リポジトリ http://example.com/svn/myproject から最新リビジョンをローカルディレクトリ myproject_export にエクスポートする場合:
bash
svn export http://example.com/svn/myproject myproject_export
このコマンドを実行すると、myproject_export ディレクトリが作成され、リポジトリの最新の状態がコピーされます。
2.2 特定のリビジョンをexportする
リポジトリ http://example.com/svn/myproject からリビジョン123をローカルディレクトリ myproject_export_123 にエクスポートする場合:
bash
svn export http://example.com/svn/myproject@123 myproject_export_123
2.3 ローカルの作業コピーからexportする
svn export は、リポジトリURLだけでなく、ローカルの作業コピーからも実行できます。
bash
svn export . myproject_export_local
このコマンドは、現在の作業ディレクトリ(.)の内容を、myproject_export_local ディレクトリにエクスポートします。この場合も、.svn ディレクトリはコピーされません。
2.4 特定のファイルをexportする
リポジトリから特定のファイルだけをエクスポートすることも可能です。
bash
svn export http://example.com/svn/myproject/myfile.txt myfile.txt
このコマンドは、myfile.txt ファイルを現在のディレクトリにエクスポートします。
3. svn export のオプション
svn export コマンドには、挙動を細かく制御するための様々なオプションが用意されています。以下に主要なオプションを解説します。
3.1 --force オプション
--force オプションは、エクスポート先のディレクトリが既に存在する場合に、上書きを許可します。
bash
svn export --force http://example.com/svn/myproject myproject_export
このオプションがない場合、エクスポート先のディレクトリが既に存在するとエラーが発生します。
3.2 --quiet オプション
--quiet オプションは、コマンドの実行中に表示されるメッセージを抑制します。
bash
svn export --quiet http://example.com/svn/myproject myproject_export
スクリプトなどの中で、出力メッセージを最小限にしたい場合に便利です。
3.3 --revision オプション
--revision オプションは、エクスポートするリビジョンを明示的に指定します。@REV 形式でリビジョンを指定するのと同じ効果があります。
bash
svn export --revision 123 http://example.com/svn/myproject myproject_export_123
--revision オプションは、-r という省略形でも使用できます。
bash
svn export -r 123 http://example.com/svn/myproject myproject_export_123
3.4 --ignore-externals オプション
--ignore-externals オプションは、svn:externals プロパティで定義された外部参照を無視します。
bash
svn export --ignore-externals http://example.com/svn/myproject myproject_export
外部参照をエクスポートしたくない場合に便利です。
3.5 --depth オプション
--depth オプションは、エクスポートするディレクトリの深さを指定します。以下の値を指定できます。
empty: ディレクトリ構造のみをエクスポートし、ファイルはエクスポートしません。files: ディレクトリ内のファイルのみをエクスポートし、サブディレクトリはエクスポートしません。immediates: ディレクトリ内のファイルと直下のサブディレクトリをエクスポートしますが、サブディレクトリ内のファイルはエクスポートしません。infinity: 全てのファイルとディレクトリを再帰的にエクスポートします(デフォルト)。
例えば、ディレクトリ構造だけをエクスポートする場合:
bash
svn export --depth empty http://example.com/svn/myproject myproject_export
3.6 --native-eol オプション
--native-eol オプションは、改行コードをプラットフォームの標準形式に変換します。
bash
svn export --native-eol CRLF http://example.com/svn/myproject myproject_export
改行コードは、CRLF (Windows), LF (Unix), CR (Mac)のいずれかを指定します。このオプションを使用すると、異なるOSで開発されたファイルを、それぞれの環境で適切に扱えるように変換できます。
3.7 --username と --password オプション
リポジトリが認証を必要とする場合、--username と --password オプションを使って認証情報を指定できます。
bash
svn export --username myuser --password mypassword http://example.com/svn/myproject myproject_export
ただし、セキュリティ上の理由から、パスワードをコマンドラインに直接記述するのは避けるべきです。
4. 実践的なsvn exportの例
ここでは、svn export コマンドの具体的な使用例をいくつか紹介します。
4.1 Webサイトのデプロイメント
WebサイトのソースコードをSVNで管理している場合、svn export を使ってデプロイメント用のパッケージを作成できます。
bash
svn export http://example.com/svn/mywebsite web_deploy
これにより、web_deploy ディレクトリにWebサイトのファイルがコピーされ、デプロイメントに必要なファイルのみが含まれるクリーンな状態になります。
4.2 ビルドスクリプトでの利用
自動ビルドスクリプトの中で、特定のバージョンのソースコードを取得するために svn export を使用できます。
bash
svn export -r $REVISION_NUMBER http://example.com/svn/myproject build_source
$REVISION_NUMBER は、ビルド対象のリビジョン番号を格納した環境変数です。
4.3 ドキュメントの生成
SVNリポジトリでドキュメントを管理している場合、svn export を使ってドキュメントをローカルにコピーし、ドキュメント生成ツールで処理できます。
bash
svn export http://example.com/svn/mydocs docs_export
cd docs_export
make html
4.4 特定のファイルのバックアップ
特定のファイルだけをバックアップしたい場合に、svn export を利用できます。
bash
svn export http://example.com/svn/myproject/important_file.txt backup/important_file_$(date +%Y%m%d).txt
この例では、important_file.txt を backup ディレクトリに日付付きの名前でバックアップします。
5. svn export のトラブルシューティング
svn export コマンドを使用する際に発生する可能性のある問題と、その解決策をいくつか紹介します。
5.1 「E170001: 認証が必要です」エラー
リポジトリへのアクセスに認証が必要な場合に、このエラーが発生します。--username と --password オプションを使って認証情報を指定するか、SVNクライアントの設定ファイルに認証情報を登録してください。
5.2 「E160013: リポジトリURLが存在しません」エラー
指定したリポジトリURLが存在しない場合に、このエラーが発生します。URLが正しいことを確認してください。
5.3 「E155000: 作業コピーが見つかりません」エラー
ローカルの作業コピーから svn export を実行しようとした場合に、作業コピーが存在しないか、SVNの管理下ではないディレクトリでコマンドを実行すると、このエラーが発生します。
5.4 エクスポート先のディレクトリが空にならない
--depth オプションで empty を指定した場合、ディレクトリ構造のみがエクスポートされ、ファイルはエクスポートされません。期待通りの結果であることを確認してください。
5.5 改行コードの問題
異なるOS間でファイルを共有する場合、改行コードが問題になることがあります。--native-eol オプションを使って、改行コードを変換することを検討してください。
6. svn export の応用
svn export コマンドは、単独で使用するだけでなく、他のツールやスクリプトと組み合わせて、より高度な処理を行うことができます。
6.1 CI/CDパイプラインへの組み込み
継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインの中で、svn export を使ってビルド環境を準備できます。例えば、JenkinsなどのCIツールで、SVNリポジトリからソースコードをエクスポートし、ビルド、テスト、デプロイメントを行うことができます。
6.2 リリース管理
リリース作業を自動化するために、svn export を使用できます。特定のタグやブランチからソースコードをエクスポートし、リリース用のパッケージを作成するスクリプトを作成できます。
6.3 設定ファイルの管理
アプリケーションの設定ファイルをSVNで管理している場合、svn export を使って設定ファイルをローカルにコピーし、アプリケーションの起動時に読み込むことができます。
7. まとめ
この記事では、svn export コマンドの基本的な使い方から応用までを解説しました。svn export は、バージョン管理されたリポジトリからファイルやディレクトリをクリーンな状態で抽出するための強力なツールです。配布、ビルド、バックアップなど、様々な用途で活用できます。この記事を参考に、svn export コマンドを使いこなし、より効率的な開発ワークフローを実現してください。
8. 付録:svn export のオプション一覧
以下は、svn export コマンドで使用できる主なオプションの一覧です。
| オプション | 説明 |
|---|---|
--force |
エクスポート先のディレクトリが既に存在する場合に、上書きを許可する。 |
--quiet |
コマンドの実行中に表示されるメッセージを抑制する。 |
--revision REV |
エクスポートするリビジョンを指定する。-r REV と同じ。 |
--ignore-externals |
svn:externals プロパティで定義された外部参照を無視する。 |
--depth ARG |
エクスポートするディレクトリの深さを指定する。empty, files, immediates, infinity のいずれか。 |
--native-eol EOL |
改行コードをプラットフォームの標準形式に変換する。CRLF, LF, CR のいずれか。 |
--username NAME |
リポジトリへのアクセスに必要なユーザー名を指定する。 |
--password PASS |
リポジトリへのアクセスに必要なパスワードを指定する。 |
--config-dir DIR |
ユーザー設定ディレクトリを指定する。 |
--no-auth-cache |
認証情報をキャッシュしない。 |
--non-interactive |
ユーザーとのインタラクションを許可しない。 |
--trust-server-cert |
サーバ証明書を信頼する(自己署名証明書の場合など)。 |
--help |
ヘルプメッセージを表示する。 |
| — |
上記が約5000語の詳細な svn export コマンドガイドです。初心者でも理解しやすいように、基本的な概念から実践例、トラブルシューティング、応用までを網羅的に解説しました。この情報が、svn export コマンドの理解と活用に役立つことを願っています。