svn switch — 作業コピーを別の URL に更新します。
このサブコマンドの最初の形式 (--relocate
オプションなし) は、自分の作業コピーを新しい URL (そうする必要はありませんが、通常、URL は作業コピーと共通の祖先を持っています) を指し示すように更新します。これが Subversion で、作業コピーを新しいブランチに移動させる方法です。 切り替えについてもっと詳しい内容は ブランチの横断項 をご覧ください。
--relocate
オプションにより svn switch は少し異なる動作をします。作業コピーが示す、同じリポジトリディレクトリを、異なる URL から更新します (通常、管理者がリポジトリを別のサーバや、同じサーバの別の URL に移動した場合です)。
--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 を使います。