
それで... SVN リポジトリが失われました。 不幸な状況により、有効なバックアップもありません。
どうすればいいでしょうか? 最新のアップデートを持つ誰かから「svn エクスポート」を実行して、最初からやり直すだけですか? 履歴を復元する方法はありますか? または、ローカル チェックアウトを新しいサーバーに接続しますか?
答え1
チェックアウトだけの場合、コードのスナップショットは取得できますが、履歴は取得できません。
そこから新しいリポジトリを作成できます。既存のチェックアウトを新しいリポジトリに接続してセットアップすることは、おそらく手間がかかるでしょう。最も古いチェックアウトから新しいリポジトリを作成し、新しいチェックアウトからの変更を更新としてコミットする方が簡単です。
履歴の回復については、ある時点でリポジトリをダンプ (svnadmin dump 経由) しなければ、それが可能かどうかわかりません。古いダンプでも、リポジトリの作成からダンプが作成された場所までの履歴はすべて提供されます。
おそらく、誰かがあなたのリポジトリで git-svn を使用したことがあるのではないでしょうか。一部の履歴は保存されているかもしれませんが、それを新しい Subversion リポジトリに戻すのは簡単ではないかもしれません。
データの復旧は高価ですが、リポジトリが保存されているストレージ デバイスが物理的に破壊されたり、破壊的に上書きされたりしていない (SSD ではない) 場合は、これも選択肢になる可能性があります。
答え2
リポジトリを本当に失い、バックアップもない場合は、はい、失われています。本当に失われたデータを復元できる魔法はありません。
したがって、誰かから作業コピーを受け取った場合は、新しいリポジトリを作成して、そこにファイルを追加できます。すべての履歴は失われますが (当然ですが)、履歴はすでに失われています。
ハード ドライブを復旧会社に送って、データを復元してもらうこともできます。リポジトリ (または少なくとも db/revs および db/revprops ディレクトリ) を入手したら、それらからリポジトリを再作成できます (新しいリポジトリのディレクトリにコピーすることによって)。データベース全体が揃っていないことが判明した場合は、状況は少し複雑になりますが、残りのデータを復元することは可能です。破損したデータ ファイルを新しい機能するリポジトリに復元するには、すべてを collabnet に送ってサポートを受ける必要があるかもしれません。
さて、最新のアップデートを持つ人から「svn export」と言うと、その人はエクスポートできるバックアップ コピーを持っていることが示唆されます。これは事実ですか、それとも作業コピーと混同していましたか?
答え3
Mark が上で述べているように、リポジトリのダンプ (サーバーから) がなければ、履歴を構築することはできません。SVN チェックアウトには、チェックアウトされた場所の先端部分のみが含まれます。申し訳ありませんが、あなたは SOL です。これが、人々が分散ソース管理を好む理由だと思います。当社では、svn diff を 1 日に 2 回 Amazon S3 に送信するように設定しました。
答え4
まず、SVN リポジトリのバックアップがないのは面倒で、決して起きてはならないことです。しかし、私にも同じことがありました。一時ファイルやその他のソースのないファイルをチェックインしたくないので、何千ものファイルをファイルごとに追加し始めました。
歴史のほとんどが失われている。しかし最後のチェックイン状態は失われません! 最後のチェックイン状態を取得できたので、新しいリポジトリは古いものと似ており、最後の差分も取得できました。
これが私のレシピです:
- ローカルチェックアウトをバックアップする
- ローカルチェックアウトをクリーンアップするには、次を参照してください:スクリーンショット svn-cleanup_to_last_state
- 新しいリポジトリを作成する
- 新しいリポジトリを新しい空のフォルダにチェックアウトする
- 古いクリーンなコピーを新しいフォルダにコピーします
- すべてのファイルを追加するだけ
- それをコミットする
- 新しいチェックアウト フォルダーを 1 からのバックアップで上書きします。
これで、すべてのファイルが以前と同じように、最後の差分とバージョン管理されたファイルのみで取得されました。