2

今日、古い Subversion リポジトリと作業コピーを復元しようとしている興味深い Catch 22 に出会いました。

最初にレポを移動してアップグレードし、次に作業コピーをアップグレードして、新しく移動したレポを指すようにしました。

$ svn upgrade
svn: E180001: Unable to connect to a repository at URL 'file:///OLD/REPO/PATH'
svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file:///OLD/REPO/PATH'

そのため、リポジトリが間違った場所を指しているため、アップグレードは失敗します。問題ありません。作業コピーを新しいリポジトリ パスに再指定します。

$ svn switch --relocate file:///OLD/REPO/PATH file:///NEW/REPO/PATH .
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/WORKING/COPY/PATH' is too old (format 10, created by Subversion 1.6)

これは完璧な Catch 22 です。レポ パスが間違っているためアップグレードできません。アップグレードしていないため、レポ パスを修正できません。

4

3 に答える 3

3

私の作業コピーは、「svn upgrade」を行うべきだと提案しました。これを行った後、URL "file:///..." を使用してローカル リポジトリに接続できません。次の行でコメントアウトしたものを除いて、それに対するすべての代替手段は機能しませんでした。

次の手順を実行して、この問題を解決しました。

  1. 同じリポジトリから新しい作業コピーを作成する "file:///...": "svn checkout file:///... new-wc".
  2. 古い作業コピーから現在の変更を適用します (「rsync -a old-wc/ new-wc/」を使用)。
  3. 新しい変更をリポジトリにコミットします。
  4. すべての作業コピーを削除します ("rm -rf old-wc")。
  5. 「作業中」の置き換え ;-) 作業コピー: 「mv new-wc old-wc」。

それは私のために働いた。お役に立てれば!

于 2012-12-08T13:44:12.930 に答える
1

誰かに役立つ場合に備えて、私が思いついた答えを投稿しています。しかし、それは理想的ではないので、他の誰かがより良い解決策を持っているかどうか非常に興味があります.

/OLD/REPO/PATH が言及されている場所を確認するために、作業コピー内のファイルを grep しました。唯一の場所は、すべてのフォルダーの「.svn/entries」ファイルにありました。

そこで、簡単な bash スクリプトを実行して各エントリ ファイルのパスを置き換えるだけで、独自の「svn switch --relocate」を作成することにしました。

#!/bin/bash
for f in `sudo find . -name "entries"`
do
   sudo perl -pi -e 's/OLD\/REPO\/PATH/NEW\/REPO\/PATH/g' "$f"
done

これを回避する簡単な方法、または「エントリ」ファイルのレポパスを手動で変更することの欠点を知っている人はいますか?

于 2012-08-01T19:52:31.207 に答える
1

1 つの解決策は、Subversion クライアントをダウングレードするか、古いバイナリを別のディレクトリにインストールして、一時的にその場所をパスに追加することです。これにより、最初にリポジトリを再配置してから、新しいクライアントに切り替えてアップグレードできます。

于 2012-08-01T20:56:10.070 に答える