名前

svn switch — 作業コピーを別の URL に更新します。

書式

svn switch URL [PATH]
switch --relocate FROM TO [PATH...]

説明

このサブコマンドの最初の形式 (--relocate オプションなし) は、自分の作業コピーを新しい URL (そうする必要はありませんが、通常、URL は作業コピーと共通の祖先を持っています) を指し示すように更新します。これが Subversion で、作業コピーを新しいブランチに移動させる方法です。 切り替えについてもっと詳しい内容は ブランチの横断項 をご覧ください。

--relocate オプションにより svn switch は少し異なる動作をします。作業コピーが示す、同じリポジトリディレクトリを、異なる URL から更新します (通常、管理者がリポジトリを別のサーバや、同じサーバの別の URL に移動した場合です)。

別名

sw

変更対象

作業コピー

リポジトリアクセス

あり

オプション

--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--diff3-cmd CMD
--relocate FROM TO
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

vendors-with-fix から分岐した vendors というディレクトリ内にいて、そのブランチの作業コピーに移りたい場合は以下のようにします。

$ svn switch http://svn.red-bean.com/repos/branches/vendors-with-fix .
U  myproj/foo.txt
U  myproj/bar.txt
U  myproj/baz.c
U  myproj/qux.c
リビジョン 31 に更新しました。

そして、元に戻りたいときには、最初に作業コピーをチェックアウトしたリポジトリの場所を、URL として指定するだけです。

$ svn switch http://svn.red-bean.com/repos/trunk/vendors .
U  myproj/foo.txt
U  myproj/bar.txt
U  myproj/baz.c
U  myproj/qux.c
リビジョン 31 に更新しました。

ティップ

作業コピー全体を切り替えたくない場合、作業コピーの一部だけをブランチに切り替えることもできます。

管理者はときどき、リポジトリの 「格納場所」 を変更したいと思うこともあります — 言い換えると、リポジトリの内容に変更はなくても、リポジトリのルートディレクトリにアクセスする URL を、変えたいと思うことがあります。例えばホスト名が変更されたり、URL スキーマが変更されたり、リポジトリパス URL の先頭部分のどこかが変更されるような場合もあるでしょう。 新しい作業コピーをチェックアウトするよりも、svn switch を使って作業コピーの中に記録されているすべての URL の 先頭部分を一括して 「書き換えて」 やるほうが良いでしょう。この置換には --relocate オプションを使ってください。ファイルには一切修正を加えませんし、このコマンドでリポジトリにアクセスすることもありません。これは、Perl のスクリプトなどを使って、作業コピーの .svn/ 以下に対して s/OldRoot/NewRoot/ コマンドを実行するのに似ています。

$ svn checkout file:///tmp/repos test
A  test/a
A  test/b
…

$ mv repos newlocation
$ cd test/

$ svn update
svn: URL に対し ra_local セッションを開始できません
svn: リポジトリ 'file:///tmp/repos' を開けませんでした

$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
$ svn update
リビジョン 3 です。

警告

--relocate オプションの利用には注意してください。引数を間違って入力すると、作業コピー中に意味のない URL 情報ができてしまいます。そうなると作業コピー全体が利用不能になり、修復にはちょっとしたコツが必要になってしまいます。また --relocate を利用すべきか、すべきでないかを、はっきりと完全に理解していることも重要です。以下が原則です。

  • 作業コピーが、リポジトリの 中にある新しいディレクトリに移る場合、単に svn switch を使います。

  • 作業コピーは同じリポジトリのディレクトリを指しているが、リポジトリ自身の場所が移った場合には、svn switch --relocate を使います。