プロジェクトをCVSからSVNに移行しました。次に、そのプロジェクトの名前を変更する必要があります。すべての履歴をそのままにして、名前を変更する最良の方法は何でしょうか。プロジェクトフォルダには、約100個のCとそのヘッダーファイルが含まれています。
リポジトリの名前を変更するSubversionにはbuilt-inメカニズムはありません。
整合性と履歴を維持するための最良のオプションは、古いリポジトリのリポジトリダンプを実行してから、ダンプを新しいリポジトリに再インポートすることです。
これについての投稿をここに書きました: How to Rename an SVN repository 。
使用する必要があるのは、svnadminユーティリティを使用してから、svnadmin create新しいリポジトリ、svnadmin dump前のリポジトリの内容、最後にsvnadmin importsvnadmin createを使用して作成した新しいリポジトリへのダンプ。
[〜#〜] edit [〜#〜]
リポジトリ内の「プロジェクト」の名前を変更する必要がある場合(プロジェクトごとにディレクトリを意味すると仮定します)、単に svn moveコマンド を使用する必要があります。これはsvnadminではなくsvnクライアントを使用して行われることに注意してください。 svn moveコマンドの構文はsvn move SRC DEST
そして、基本的にリポジトリ内のファイルまたはディレクトリの名前を変更することができます。そのファイル(またはディレクトリ)のすべての履歴を保存する必要があります。
リポジトリの名前を変更するには、そのルートディレクトリの名前を変更し、新しいUUIDを生成するだけです。リポジトリが/var/svnroot/my_repo
リポジトリの名前を変更するには、このコマンドを(rootとして)実行する必要があります。
$ mv /var/svnroot/my_repo /var/svnroot/my_new_repo
$ svnadmin setuuid /var/svnroot/my_new_repo
その後、お気に入りのプロトコルを介してアクセスできます。
SVN Book \5.リポジトリ管理\ リポジトリの移動と削除 :
Subversionリポジトリデータは、リポジトリディレクトリ内に完全に含まれています。したがって、ディレクトリを操作するオペレーティングシステムが提供するツールを使用して、Subversionリポジトリをディスク上の他の場所に移動したり、リポジトリの名前を変更したり、リポジトリをコピーしたり、リポジトリを完全に削除したりできます
通常、名前の変更は同じサーバーで実行されるため、リポジトリディレクトリの単純な名前変更/移動で実行されます。 svnadmin setuuid
の呼び出しはnotが必要です。これは、コピーを作成しておらず、UUIDが同じままである必要があるため、クライアントが簡単に新しいリポジトリURLに再配置します。
管理者がリポジトリの「ベースの場所」を変更する場合があります。つまり、リポジトリのコンテンツは変更されませんが、リポジトリのルートに到達するために使用されるメインURLは変更されます。たとえば、ホスト名、URLスキーム、またはリポジトリ自体につながるURLの一部が変更される場合があります。新しい作業コピーをチェックアウトするのではなく、svn switchコマンドを使用して、作業コピー内のすべてのURLの先頭を「書き換え」ます。 --relocateオプションを使用して、置換を行います。ファイルの内容は変更されず、リポジトリにも接続されません。これは、s/OldRoot/NewRoot /を実行する作業コピーの.svn /ディレクトリでPerlスクリプトを実行するのに似ています。
$ svn checkout file:///tmp/repos test
A test/a
A test/b
…
$ mv repos newlocation
$ cd test/
$ svn update
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///tmp/repos'
$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
$ svn update
At revision 3.
svn relocate —作業コピーを別のリポジトリのルートURLを指すように再配置します。
あらすじ
svn relocate FROM-PREFIX TO-PREFIX [PATH...]
svn relocate TO-URL [PATH]
説明
管理者がリポジトリの場所(またはクライアントの観点から見た場所)を変更する場合があります。リポジトリのコンテンツは変更されませんが、リポジトリのルートURLは変更されます。リポジトリが別のコンピューターから提供されるようになったため、ホスト名が変更される場合があります。または、リポジトリがプレーンHTTPではなくSSL(https://を使用)で提供されるようになったため、URLスキームが変更される可能性があります。これらのタイプのリポジトリの再配置には、さまざまな理由があります。しかし理想的には、リポジトリの「アドレスの変更」によって、そのリポジトリを指すすべての作業コピーが突然使用できなくなることはありません。そして幸いなことに、そうではありません。 Subversionは、リポジトリの再配置時にユーザーに新しい作業コピーを強制的にチェックアウトさせるのではなく、svn relocateコマンドを提供します。これは、作業コピーの管理メタデータを「書き換え」、新しいリポジトリの場所を参照します。
最初のsvn relocate構文を使用すると、1つ以上の作業コピーを、それらの作業コピーに記録されているリポジトリルートURL内の検索と置換に本質的に相当する量だけ更新できます。 Subversionは、これらのURLの最初のサブストリングFROM-PREFIXをストリングTO-PREFIXに置き換えます。これらの初期URL部分文字列は、それらを区別するために必要なだけ長くても短くてもかまいません。明らかに、この構文形式を使用するには、作業コピーが指しているリポジトリの現在のルートURLと、そのリポジトリの新しいURLの両方を知る必要があります。 (svn infoを使用して前者を決定できます。)
2番目の構文では、作業コピーが関連付けられている現在のリポジトリルートURLを知る必要はなく、それが指すべき新しいリポジトリURL(TO-URL)のみが必要です。この構文形式では、一度に1つの作業コピーのみを再配置できます。
例
ローカルリポジトリのURLを反映した作業コピーから始めましょう。
$ svn info | grep URL:
URL: file:///var/svn/repos/trunk
$
ある日、管理者がオンディスクリポジトリディレクトリの名前を変更することにしました。メモを忘れたため、次回作業コピーを更新しようとするとエラーが表示されます。
$ svn up
Updating '.':
svn: E180001: Unable to connect to a repository at URL 'file:///var/svn/repos/trunk'
自動販売機で管理者を追い詰めた後、移動されているリポジトリについて学習し、新しいURLが通知されます。ただし、新しい作業コピーをチェックアウトするのではなく、単に作業コピーのメタデータを書き換えて新しいリポジトリの場所を指すようにSubversionに依頼します。
$ svn relocate file:///var/svn/new-repos/trunk
$
Subversionは、それが何をしたかについてあまり語りませんが、エラーなしの操作が本当に必要なのですよね?私たちの作業コピーは再びオンライン操作に機能します。
$ svn up
Updating '.':
A lib/new.c
M src/code.h
M src/headers.h
…
デフォルトでは、svn relocateは、作業コピー内にネストされた外部作業コピーをすべて走査し、それらの作業コピーの再配置も試みます。使用 --ignore-externals
オプションは、この動作を無効にします。
まず、\Repositories
フォルダー、(デフォルトC:\Repositories
)
その後、目的のリポジトリの名前を変更し、その中に/Repositories
フォルダー。 (ウィンドウズ)
Eclipseを使用している場合は、SVNリポジトリの古いリポジトリの場所を破棄し、New->Repository Location...-> your new repository name
。それでおしまい。