4

私は SVN リポジトリを含む HDD を持っていましたが、それは「死にました」。なんとか回復するまで、別のHDDに新しいリポジトリを作成し、リビジョン1から始まるすべてのファイルを新しいリポジトリにコミットし、すべての履歴を失いました.

古い SVN リポジトリを復元したので、その間に作業していた新しいリポジトリを古いリポジトリにロードしようとしているので、基本的に新しいリポジトリのリビジョン 1 は古いリポジトリのリビジョン 2456 になる必要があります。

コマンドを実行するとsvnadmin load、次のエラーが発生します。

<<< Started new transaction, based on original revision 1
     * adding path : ---------------- ...svnadmin: File already exists: filesystem 'C:\
Repositories\repname\db', transaction '2788-25k', path '----------------'

それらを「マージ」する方法はありますか?もちろん、可能であれば...

4

3 に答える 3

2

新しいリポジトリでやり直して、最初に元のリポジトリからトランザクションをロードする必要があります。

svnadmin dump recovered-repo > dumpfile
svnadmin load new-repo < dumpfile

次に、クラッシュ以降に作業している現在のリポジトリの最後から新しいトランザクションをロードします。新しいものだけを取るようにリビジョンを指定してください。

svnadmin dump current-repo -r firstnewrev:lastnewref --incremental > newdumpfile
svnadmin load new-repo < newdumpfile

テストするリポジトリがないため、実際にこれをテストしていないので、注意して、バックアップしていないものを台無しにしないでください. 詳細については、無料のオンライン ブックを参照してください: http://svnbook.red-bean.com/

于 2011-08-02T17:51:28.043 に答える
1

cvs2svn を使用して古い CVS リポジトリを移行する必要があったときに、この問題に遭遇しました。そのプロセスはうまくいきましたが、最初は CVS からいくつかのプロジェクトを見逃していました。また、チームは事後に CVS にいくつかのコミットを行いました。SO の後続の SVN ダンプには、次の組み合わせがありました。

ロード時に競合を引き起こしたのは 2 番目の部分でした。

そのため、CVS リポジトリ全体を再移行するのではなく (何時間もかかっていたはずです)、旧友の svndumpfilter に頼って衝突するパスを削除しました。

  1. 競合を除外するために最新のダンプ ファイルをフィルタリングします (元の diump ファイルはそのままにしておきます。後で必要になります)。
  2. インポートを実行します (リポジトリには、競合を除くすべてのプロジェクトの最新のものがあります)
  3. 最新のダンプをフィルタリングして、競合のみを含めるようになりました(後で使用)
  4. 競合するパスを除外して、既存の SVN リポジトリのダンプを実行します
  5. 競合のみを含めるように最新のダンプ ファイルをフィルター処理する
  6. 新しい空のリポジトリを作成
  7. 古いリポジトリを安全な場所に移動します
  8. フィルタリングされた両方のダンプを新しいリポジトリにインポートします

    [svnrepos]$ svndumpfilter exclude conflict-path < latestRepo.dump > repo_filtered_woConflicts.dump
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
    [svnrepos]$ svndumpfilter include conflict-path < latestRepo.dump > repo_filtered_ConflictsOnly.dump 
    [svnrepos]$ svnadmin dump REPONAME | svndumpfilter exclude conflict-path > repo_filtered_woConflicts.dump #overwrites previous filter
    [svnrepos]$ mv REPONAME REPONAME_old
    [svnrepos]$ svnadmin create REPONAME
    [svnrepos]$ chmod -R g+rwx REPONAME # if shared by apache
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_ConflictsOnly.dump

于 2011-10-14T18:03:06.680 に答える
0

私の場合、パスからリポジトリを削除しただけで、削除された後、ダンプをリポジトリの場所にロードできました。私はこのようなことをしました:

# 古いリポジトリを削除:

rm -rf リポジトリ名 1,リポジトリ名 2, ...., リポジトリ名[n]

#リポジトリをロード:

svnadmin load /path_to_repo/repo_name < /path_to_dump/repo_name.dump

于 2021-12-02T15:11:20.987 に答える