コマンドライン Subversion を使ってプロジェクト ソース ファイルにアクセス

コマンドライン Subversion の使用

バージョン管理に Subversion を使用すると開発プロジェクトに参加する場合、プロジェクト ソースファイルをアクセスおよび変更するには Subversion を使用する必要があります。左側のナビゲーション ペインにある [Subversion] リンクをクリックすると、オンラインでプロジェクトのディレクトリ構成とファイルを参照することができます。

[Subversion] ページには、branches/、tags/、trunk/ の 3 つのサブディレクトリ、および Readme ファイルが表示されます。 Readme ファイルには Subversion リポジトリのトップレベルの一覧があります。[オプションにアクセス] をクリックすると Subversion クライアントのセットアップ手順が参照できます。ローカル マシンに Subversion クライアントをインストールしておく必要があります。

プロジェクトのローカルの作業用コピーの取得: svn checkout

最新ソースファイルの「作業用コピー」を取得するには、ソースファイルをチェックアウトします。これにより、ファイルがリポジトリから自分のシステムにコピーされます。シェルまたはターミナル クライアントで、次のコマンドを入力します。

svn checkout https://(projectname).(domain)/svn/(projectname)/(DIR) (projectname) --username [ここにユーザ名を入力してください]

要求されたら自分のユーザ パスワードを入力します。これは、このサイトのユーザ アカウントに関連付けられているものと同じパスワードでなければなりません。ディレクトリを指定しないと、すべてのプロジェクト ソース コードがチェックアウトされます。作業用 [www/] フォルダがある [trunk/] ディレクトリをチェックアウトすることもできます。

スイッチ:--revision (-r) REV, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

基本作業サイクル」、「初期チェックアウト」、「作業用コピー」を参照してください。

注意:サイトが SSL (Secured Socket Layer) に対応していない場合は、https ではなく http を使用して Subversion オペレーションを実行します。たとえば、プロジェクトのリポジトリから最新のソース コードをチェックアウトするには、次のコマンドを使用します。

svn checkout https://(projectname).(domain)/svn/(projectname)/(DIR) (projectname) --username [ここにユーザ名を入力してください]

Subversion リポジトリ内のファイルでの作業

プロジェクト リポジトリのローカル コピーをチェックアウトした後は、既存のファイルの編集、新しいファイルやディレクトリの作成、ファイルの削除をローカルで行うことができます。加えた変更は Subversion リポジトリにコミットするまで、プロジェクト ファイルのローカル コピーにのみ反映されます。

作業用コピーからリポジトリへのファイルまたはディレクトリの追加: svn add

svn add FILENAME/DIR を使用して、作業ディレクトリ内で最初にその作成・編集を行った後、あるいは内容の有無に関わらずディレクトリを追加した後はリポジトリに新しいファイルを追加することができます。

これにより作業用コピーにファイルまたはディレクトリが追加され、リポジトリへの追加のためのスケジュールが行われます。次のコミット時でリポジトリにアップロードされ、追加されます。コミットする前に何かを追加したり、あるいは気が変わったときは svn revert を使ってリポジトリへの追加をキャンセルすることができます。

スイッチ:--targets FILENAME, --non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props

ファイル/ディレクトリの追加の例」を参照してください。

リビジョンおよび作成者情報を持つ特定のファイルの内容の表示: svn blame

次のコマンドを入力すると指定したファイルの作成者およびリビジョン情報を見ることができます。

svn blame FILENAME

テキストの各行には、作者名 (ユーザ名) で始まり、その行を変更したときのリビジョン番号を含む注が付きます。

スイッチ:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

特定のファイルの内容の表示: svn cat

ときには自分の作業用コピーがリポジトリのものに比べて古かったり、ローカルの作業用コピーを変更していたりすることもあります。そういった場合、特定のファイルの内容の違いを確認してから変更をコミットするか、あるいは作業用コピーを編集してください。 svn cat FILENAME を実行すると、自動的にリポジトリから HEAD リビジョンが取り出せます。このサブコマンドは主に古いリビジョン番号のファイルを取り出し、画面に表示させるために使用されます。また、このサイト上でもプロジェクトのソース コードを参照することで同じことができます。

スイッチ:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

作業用コピーのクリーンアップ: svn cleanup

たまに作業用コピーがロックされているというエラーが発生することがあります。ロックを解除し、作業用コピーを再帰的にクリーンアップするには、svn update を使用します。

スイッチ:--diff3-cmd CMD, --config-dir DIR

svn cleanup」を参照してください。

作業用コピー内またはリポジトリ内のファイルまたはディレクトリのコピー: svn copy

プロジェクトにレガシー ドキュメントを使用する必要があることもあります。たとえば、既存の HTML ファイルを使用し、そのコードを基に製品の外観と雰囲気を保ちながら新しいコンテンツを作成するなどの場合が考えられます。ゼロからファイルを作成するのではなく、svn copy を使ってファイルをコピーし、エイリアスで保存してから内容を変更するという方法が便利です。リポジトリからローカルの作業用コピーへとファイルをコピーすることもでき、その逆も可能です。ローカルの作業用コピー内でファイルをコピーすることもできます。Subversion ではリポジトリ間でのコピーはサポートされていません。リポジトリ間のコピーには svn copy SRC DST を使用します。

スイッチ:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR

svn copy」を参照してください。

ローカルの作業用コピーからのファイルまたはディレクトリの削除: svn delete

不必要なファイルは、ローカルの作業用コピーから削除したいはずです。このようなとき、svn delete FILENAME を使用すれば、ファイルの削除がスケジュールされます。リポジトリから実際にファイルが削除されるのはコミットするときです。

スイッチ:--force, --force-log, --message (-m) TEXT, --file (-F) FILE, --quiet (-q), --targets FILENAME, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR

ファイル間の違いの表示: svn diff

svn diff を使用して、作業用コピーにある指定されたファイルのローカルに加えられた修正とリポジトリにある同じ箇所とを比較し、違いを表示させることができます。コマンド プロンプトで次のように入力してください。

svn diff (ファイルのパス) (プロジェクトのリポジトリの URL)

たとえば、プロジェクトのリポジトリにあるものとローカルで変更された「index.html」というファイルを比較する場合は、次のコードを入力します。

svn diff $SRC/...../index.html https://(projectname).(domain)/svn/(projectname)/trunk (projectname) --username [ユーザ名をここに入力してください]

また、ファイルがあるディレクトリで、次のコードを入力しても同じ結果が得られます。

svn diff (FILENAME)

これによりリビジョン番号とその違いが表示されます。

スイッチ:--revision (-r) REV, --old OLD-TARGET, --new NEW-TARGET, --extensions (-x) "ARGS", --non-recursive (-N), --diff-cmd CMD, --notice-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --no-diff-deleted, --config-dir DIR

履歴の検査」、「svn diff」を参照してください。

ローカル マシン上のクリーンなディレクトリ ツリーのエクスポート: svn export

プロジェクト リポジトリまたはローカルの作業用コピー内からローカル マシン上にバージョンの付いていないコピー、つまりはツリーのクリーンなディレクトリを取り出すことができます。リポジトリから古いリビジョンのクリーンなディレクトリを取得するには、次のコードを入力します。

svn export [-r REV] [PATH]

これにより URL で、あるいは (指定されていれば) リビジョンの REV、もしくは HEAD で、指定されたリポジトリからクリーンなディレクトリ ツリーが PATH にエクスポートされます。PATH を省略すると、URL の最後の部分がローカル ディレクトリ名に使用されます。また、PATH1 で指定された作業用コピーからクリーンなディレクトリ ツリーをローカル マシン内の PATH2 にエクスポートすることができます。これによりすべてのローカルの変更が保存されますが、バージョン管理下にあるファイルはコピーされません。これを実行するには、次のコードを入力します。

svn export PATH1 PATH2

スイッチ:--revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

Subversion に関するヘルプ: svn help

Subversion では、コマンドライン インターフェイス内にヘルプが用意されています。特定のサブコマンドに関するヘルプを取得するには、次のコードを入力します。

svn help [SUBCOMMAND...]

スイッチ:--version, --quiet (-q)

SVN リポジトリへの変更の追加

ローカルでファイルまたはディレクトリに変更を加えた後は、SVN リポジトリにそれらの変更をコミットする必要があります。

変更のコミット: svn commit

変更を共有リポジトリにコミットするには、次のコマンドを入力します。

svn commit -m "ここに理由を入力します"

ファイルへの変更に関する説明を省略した場合は、SVN がコミットを完了する前にファイル エディタが起動され、説明を加えるように要求されます。入力しないと「コミットに失敗」というエラーが発生します。 すべてのコミットは、自動的に記録され、プロジェクトのコミット ディスカッションに書き込まれます。

スイッチ:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --targets FILENAME, --force-log, --username USER, --password PASS, --no-auth-cache, --non-interactive, --encoding ENC, --config-dir DIR

変更のコミット」、「editor-cmd」を参照してください。

プロジェクト リポジトリのバージョンの付いていないファイルまたはツリーのインポート: svn import

svn import を使用すると、プロジェクト リポジトリにバージョンの付いていないファイルまたはツリーを再帰的にコミットすることができます。必要に応じてリポジトリ内に親ディレクトリが作成されます。次のコマンドを使用すれば PATH から URL にコピーが再帰的にコミットされます。PATH を省略すると「.」とみなされます。

svn import [PATH] URL

例:ローカル マシン上でファイルを含むバージョンの付いていないディレクトリ (D) を作成するには左側のナビゲーション ペインでプロジェクトの [Subversion] リンクをクリックして Subversion のページに移動します。[ソース コードの参照] の下に NEWDIR はリストされていないことに注意してください。プロジェクトのリポジトリに D をインポートするには、次のコードを入力します。

svn import -m "Type your message here" D http://(projectname).(domain)/svn/(projectname)/NEWDIR

ページを更新します。[ソース コードの参照] の下に D がリストされていることに注意してください。[D] をクリックしてファイルを表示します。

スイッチ:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR, --auto-props, --no-auto-props

作業用コピーのパスに関する情報の印刷: svn info

特定のサブコマンドを実行するのに作業用コピー内のファイルに関する特定の情報が必要になることがあります。svn info を入力すると作業用コピー内の作業用コピー パスの項目に関して包括的で、役に立つ情報が印刷されます。パス、名前、URL、リビジョン、ノードの種類、最終変更、作者、最後に変更されたリビジョン、最終修正日、最終更新テキスト、最終更新プロパティ、およびチェックサム

スイッチ:--targets FILENAME, --recursive (-R), --config-dir DIR

リポジトリ内のディレクトリの入力リストの表示: svn list

プロジェクトの作業を始める前、または作業用コピーを取り出す前に、プロジェクトのリポジトリ内のディレクトリやファイルなどのコンテンツを表示したり、ローカルの作業用コピー内のディレクトリ入力を表示することもできます。コマンドプロンプトで「svn list [TARGET...]」と入力しても同じものが表示されます。また、プロジェクト内の [ソフトウェア設定管理] ページを開いてプロジェクトのリポジトリを表示することもできます。

スイッチ:--revision (-r) REV, --verbose (-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

コミット ログ メッセージの表示: svn log

次のコードを入力すると作業用コピーまたはリポジトリ内のファイル/ディレクトリの個々のファイル/ディレクトリの履歴を表示させ、リビジョン情報を確認することができます。

svn log [PATH]

その結果、最新のリビジョンのコミットメッセージや作者名などの情報をはじめとするファイル/ディレクトリのリビジョン情報が表示されます。また、このサイトを使ってプロジェクト リポジトリ内の個々のファイルのコミット ログ メッセージを見ることもできます。プロジェクトの左側ナビゲーション ペインの [Subversion] リンクをクリックします。すると [Subversion] ページが表示されます。[ソース コードの参照] の下のディレクトリ内のファイルを探してファイル名をクリックします。コミット ログ メッセージのページが表示されます。

スイッチ:--revision (-r) REV, --quiet (-q), --verbose (-v), --targets FILENAME, --stop-on-copy, --incremental, --xml, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

svn log」を参照してください。

変更のマージ: svn merge

svn merge コマンドを実行すると、Subversion はリポジトリの最新バージョンのファイルを作業用コピーにマージします。

スイッチ:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --force, --dry-run, --diff3-cmd CMD, --ignore-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

svn merge」、「競合の解決 (他の変更のマージ)」、「ブランチおよびマージ:マージへの一般的なユース ケース」、「マージへベスト プラクティス」を参照してください。

リポジトリでの作業

新しいディレクトリの作成: svn mkdir

作業用コピー内に新しいディレクトリを作成する場合は次のコードを入力します。

svn mkdir PATH

プロジェクト リポジトリ内に新しいディレクトリを作成する場合は次のコードを入力します。

svn mkdir URL

PATH または URL の最後のコンポーネントによって、ディレクトリ名が決まります。リポジトリ内のディレクトリは即時コミットで作成されるため、コミット メッセージが必要になります。

スイッチ:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR

ファイルまたはディレクトリの移動: svn move

svn move SRC DST を使用すると作業用コピー内、またはプロジェクトのリポジトリ内でファイルまたはディレクトリを移動することができます。このコマンドを使用すると svn copy に続けて svn delete を使用するのと同じ結果が得られます。作業用コピー内でファイルまたはディレクトリを移動すると次にコミットするときに移動と追加のスケジュールが行われます。プロジェクト リポジトリ内でファイルまたはディレクトリを移動するのはアトミックなコミットなため、コミットメッセージが必要です。

スイッチ:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR

プロパティについて

Subversion にはその動作に影響する、あるいは動作を決定する特定のプロパティがいくつもあります。ファイルの内容と同様に、プロパティへの変更は修正、コミット、そして元に戻すことができます。ローカルの作業用コピーまたはプロジェクトのリポジトリ内のファイル、ディレクトリやリビジョンのプロパティは削除、編集、印刷、表示、設定することができます。

プロパティ」、「バージョンのないプロパティ」、「メタデータのプロパティ」、「svn propdel」、「svn propedit」、「svn propget」、「svn proplist」、「svn propset」、「Hook Scripts」を参照してください。

競合の解決: svn resolved

ローカルの作業用コピーを更新する際、競合が発生することがあります。競合は解決する必要があります。解決後、svn resolved PATH... と入力して、作業用コピーに競合が「解決」されたことを通知します。

スイッチ:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

競合の解決 (他の変更のマージ)」を参照してください。

変更を元に戻す: svn revert

Subversion では、svn revert PATH... が Windows の Ctrl Z と同じ動作をすることがわかります。次の方法を実行できます。

注意: ターゲットが与えられないと、作業用コピー内の変更が失われる可能性があります。

スイッチ:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

ファイル/ディレクトリのステータスの取得: svn status

バージョン管理の習慣として、プロジェクトのリポジトリにコミットする前に変更を見直すことをお勧めします。svn status を実行すると、作業用コピー内のファイルおよびディレクトリのステータスを印刷することができます。コード化された 8 列の出力が得られます。各列には凡例が網羅されており、その出力からエラーがないという結論を導き出すのは不可能です。この作業を簡単にし、同時に例を見るには、コマンド プロンプトに svn help status と入力します。

スイッチ:--show-updates (-u), --verbose (-v), --non-recursive (-N), --quiet (-q), --no-ignore, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir

変更の検査」を参照してください。

作業用コピーの切り替え: svn switch

svn switch URL [PATH] を使用すると、作業用コピーが新しい URL を反映するように更新することができます。作業用コピーまたはその一部を新しいブランチに移動することができます。ブランチのショートカットとしてこのサブコマンドを使用できます。

スイッチ:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --relocate, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

作業用コピーのスイッチ」、「ブランチおよびソージ」、「svn switch」を参照してください。

作業用コピーの更新: svn update

バージョン管理の習慣として、次のコマンドを使ってプロジェクト リポジトリでローカルの作業用コピーを毎日更新することをお勧めします。

svn update [PATH...]

更新された項目とその現在のステータスがリストされ、次のことを示します。

スイッチ:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

作業用コピーの更新」、「手動で競合のマージ」を参照してください。

ブランチとタグ

通常プロジェクトのトランクが開発のメインラインで使用されるのに対して、ブランチは通常そのラインのバリエーションに使用されます。ブランチは開発の進行中のラインです。ソフトウェア開発のライフサイクルでは、ブランチはソフトウェア製品の一般公開が迫っているときによく使用されます。テスト担当者がリリース候補版を検証している間、それとは別に開発を続行することができます。また、ブランチは実験的な作品やコードの完全な書き直しにも使用されます。タグは一連のファイル リビジョンが 1 つのグループを成すものがあることを示す印を付ける手段です。ブランチおよびタグは svn copy のサブコマンドを使って作成されますが、ブランチとタグは別々のものです。ブランチは複数のリビジョンを示しますが、タグは単一のリビジョンを示します。

このサイトでホストされているプロジェクトの Subversion リポジトリでは、ソース ファイルのブランチとタグがサポートされています。タグとブランチは Subversion で使用できる簡単で便利なコピー オペレーションです。

ブランチを作成、またはプロジェクトファイルにタグを付けるには、次のコードを入力します。

svn copy SRC DST -m "ここにメッセージを入力してください"

ブランチおよびマージ」を参照してください。