2

Subversionリポジトリのバックアップにホットコピーを使用しませんでした。Visual SVN Server(最新)と亀を使用しています。C:\ Repositoryをコピーして数日前にバックアップしましたが、今は復元したいと思います。

バックアップしたリポジトリフォルダをコピーして、リポジトリを使用できるようになりました。

そして今、私はチームの全員のローカルプロジェクトを手動で調べて、誰がレイトリビジョンを持っているかを確認したと思いますか?もしそうなら、それは私に何時間もかかります。

これが正しい方法なのか、それとも唯一の方法なのか、誰か知っていますか?本当にこのマニュアルですか?地元では人それぞれ違う変化があるからだと思います。

4

2 に答える 2

6

このアプローチはどうですか、各開発者:

  1. TortoiseSVN->現在無効になっている作業コピーを一時的な場所にエクスポートしますか
  2. 復元されたリポジトリから新しいチェックアウトを取得します
  3. エクスポートされた作業コピー(つまり、.svn dirsなし)を新しい作業コピーの上にコピーします
  4. 通常どおりに更新してコミットします

通常よりも多くのマージ競合が発生する可能性がありますが、通常の方法で解決できることに注意してください。

于 2009-09-18T02:08:59.657 に答える
2

バックアップ以降に行われた変更はリポジトリに存在しないため、復元されたリポジトリから全員が新たにチェックアウトする必要があります。(リビジョン番号が変更されており、変更しないと混乱する可能性があります。)

開発者のローカルコピーからの変更を回収することに関しては、はい、それはかなり手動になります。ただし、「diff」と「patch」はあなたの友達です。cygwinに慣れていない場合は、それを取得して、diff、patch、diffutils、およびpatchutilsパッケージを取得して、「diff」コマンドと「patch」コマンドを使用することをお勧めします。「diff」コマンドを使用して、ソースツリーの1つのコピーと別のコピーの間のデルタを含むファイルを作成できます。次のように使用することをお勧めします。

diff -urN --exclude=.svn fresh_check_from_new_repo old_working_copy > developer1changes.patch

各開発者の作業コピーに対してそれを行います。これらのファイルを取得し、次のような「patch」コマンドを使用して、変更を新しいチェックアウトに適用できます。

cd working_copy
patch -p1 -i ...../developer1changes.patch

これで、変更を加えた作業コピーが作成されます。(ただし、svn add、svn rms、およびプロパティの変更はありません。)そこから、何をコミットする必要があるかを判断します。

「filterdiff」コマンドを使用して、パッチファイルを取り出し、変更の一部をフィルタリングして、パッチにパイプすることができます。これにより、それらの変更のみが適用されます。

編集: 別のオプション:開発者ごとに、ブランチを作成してそのブランチをチェックアウトし、ローカルコピーをその新しい作業コピー内のファイルにコピーしてコミットします。

これにより、リポジトリ内のすべての作業が失われることはありません。次に、ブランチをトランクにマージしようとするときに、競合に対処する必要があります。その時点で、GUIツールを使用して、保持またはトスする変更を選択できるようになります。

しかし、簡単な答えは次のとおりです。リポジトリの最新のバックアップがないため、やるべきことがたくさんあります。したがって、すべてが再び機能できるようになったら、はるかに頻繁なバックアップスケジュールを設定します。 。

于 2009-09-18T01:50:09.320 に答える