15

SVN リポジトリをあるマシンから別のマシンに移動する過程にあり、新しいリポジトリの新しいドメイン名がそれに伴います。問題は、リポジトリ内に、リポジトリ内の他のプロジェクトへの svn:externals 参照がたくさんあることです。たとえば、svn:externals プロパティにある projectA があります。

external/libraryA svn://oldserver.net/repo/libraryA
external/libraryB svn://oldserver.net/repo/libraryB

...等々。すべての URL がこの特定のドメイン名を参照しているため、簡単に解析できます。すでに教訓を学んだので、これらの URL を「svn://localhost/」に移行しますが、まだチェックアウトできるように、リポジトリの履歴を調べて古い URL をすべて書き換える方法を見つける必要があります。リンクが壊れていない、これらのプロジェクトの古いリビジョン。

どうすればこれを行うことができますか?

4

6 に答える 6

19

これにはSvnDumpToolを使用します。それはまさにあなたが探しているものを持っています:

svndumptool transform-prop svn:externals "(\S*) (|-r ?\d* ?)http://oldserver.net(/\S*)" "\2\3 \1" source.dumpfile source-fixed-externals.dumpfile

これにより、各外部がsubversion 1.5 形式に修正され、相対 URL が使用されます。

したがって、svn:externals は次のようになります。

external/libraryA svn://oldserver.net/repo/libraryA

なる:

 /repo/libraryA external/libraryA

サーバー ルートの相対 URL を使用します。

于 2010-08-19T20:47:37.977 に答える
8

あなたがまだ古いリビジョンをチェックアウトできるようにしたいということを示したように、唯一の解決策は、実際には履歴全体を「書き換える」ことです (前述の解決策 D)。

これを行うには、次のことを行う必要があります。

1) svnadmin dumpを使用して、リポジトリ全体の内容をダンプします。

$ svnadmin dump /path/to/repos > original-dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.

2) ダンプ ファイルを編集して、svn:externals URL を変更します。これが最も難しい部分です。リポジトリにバイナリ データも含まれていると仮定すると、プレーン テキスト エディタでダンプ ファイルを開くと、ダンプ ファイルが破損する可能性が高くなります。フリーウェアの Hex Editor XVI32など、いわゆる「hex-editor」を使用して良い経験をしました。

3) 新しいリポジトリを作成し、変更したダンプファイルをそこにロードします。

$ svnadmin create newrepos
$ svnadmin load newrepos < modified-dumpfile

詳細については、次のリンクにも興味があるかもしれません:
http://svnbook.red-bean.com/en/1.1/ch05s03.html

注: Subversion 1.5では、svn:externals プロパティに相対 URLのサポートが実際に追加されました。これにより、将来この種の問題を正確に防ぐことができます:
http://subversion.tigris.org/svn_1.5_releasenotes.html#externals

于 2008-10-24T15:51:33.550 に答える
0

私のすべての外部は、という名前のディレクトリにありましflowた。このワンライナー (bash シェル) を使用して、外部の URL を修正しました。

for p in $(find -maxdepth 4 -name flow); do svn ps svn:externals "$(svn pg svn:externals $p/.. | perl -pe 's/^(\w+) svn\+ssh.*thing\.domain\.net(.*)/$2 $1/')" $p/..; 終わり
于 2017-05-10T08:44:20.537 に答える
0

あなたは出来る:

a) 古いリビジョンをチェックアウトし、hosts-file を変更して古い名前が新しいアドレスを指すようにしてから、svn を更新します。URLパスも変更された場合...それなら、次のこともできます:

b) 時間をかけて、現在の (古いリビジョンの) 作業コピーでプロパティを検索し、そこにある URL をコミットせずに変更するスクリプトを作成します。また:

c) 新しいプロパティ値をチェックインしたリビジョン (-s) をメモし、古いバージョンをチェックアウトして、それらのリビジョン (プロパティのみに影響するもの) を作業コピーにマージします。

d) または、場合によっては、svndump を使用してリポジトリ データをダンプし、ダンプ内の URL を文字列置換してから復元します。それが機能するという保証はありません ;-)

于 2008-10-15T13:40:57.777 に答える