14

私は、3 年以上経過し、6,100 件以上のコミットが含まれ、サイズが 1.5 GB を超える SVN リポジトリを使用しています。新しいサーバーに移動する前に、SVN リポジトリのサイズを縮小したい (完全な SVN エクスポートのサイズについて話しているのではなく、サーバー上に存在する完全なリポジトリを意味します)。

現在のリポジトリには、すべてのソフトウェア プロジェクトのソース コードが含まれていますが、次のような重要性のない比較的大きなバイナリ ファイルも含まれています。

  • 多数のサードパーティ ツールのフル インストーラー。
  • .jpg および .png ファイル (同じフォルダーにある PSD の未変更のエクスポート)。
  • Bin および Obj フォルダー (これらは、次のコミットで「svn 無視」されます)。
  • Resharper ディレクトリ。

これらの大きなファイルの多くは、追加されてから「SVN 削除」されており、最大の犯罪者を特定するというさらなる問題を引き起こしています。

次のいずれかを行います。

  • すべてのソフトウェア プロジェクトのコードのみを含む新しい SVN リポジトリを作成します。コピーしたファイルが古いリポジトリからの SVN 履歴を維持することが非常に重要です。
  • 大きなバイナリ コミットとファイルを既存のリポジトリから削除します。

これらのいずれかが可能ですか?

4

7 に答える 7

8

Otherside はsvnadmin dumpなどについて正しいです。このようなものは、レポに大量のデータを追加したリビジョンへの大まかなポインタを取得し、次の候補となりますsvndumpfilter

for r in `svn log -q | grep ^r | cut -d ' ' -f 1 | tr -d r`; do
   echo "revision $r is " `svn diff -c $r | wc -c` " bytes";
done

次のような方法で、特定の拡張子 (ここでは .jpg) を持つファイルを追加したリビジョンを見つけることもできます。

svn log -vq | egrep "^r|\.jpg$" | grep -B 1 "\.jpg$"
于 2010-02-02T01:40:15.923 に答える
4

svnadmin dumpを使用して現在のリポジトリのダンプ ファイルを取得する必要があり、場合によってはsvndumpfilterを使用してダンプ ファイルを処理する必要があります。注意さえすれば、ダンプファイルを手動で変更することもできます。

迅速で簡単な仕事ではないかもしれませんが、それは可能です。私は似たようなことをしましたが、はるかに小さなリポジトリに対してのみです。約 150 のリビジョンがあり、約 600MB のレポがありました。

現在のリポジトリからダンプを作成し、必要な変更を加えて、変更されたダンプファイルを新しいリポジトリにロードしてみてください。次に、新しいリポジトリをチェックして、すべてがまだ意味を成していることを確認します (履歴はまだ正しく、パスに奇妙な変更はありません...)。

于 2010-02-01T14:38:47.097 に答える
1

問題のあるコミットを見つけるだけで、リポジトリをホストしているサーバーにアクセスできる場合: リポジトリの db/revs サブディレクトリで大きなファイルを探します (fsfs 形式を使用していると仮定します)。

于 2013-12-18T06:59:23.973 に答える
1

「SVN Delete」を使用してリポジトリからファイルを削除した場合、実際にはファイルを削除していません。これはSVNの美しさです。ファイルがリポジトリに追加されると、(ダンプとロードを使用しない限り) 永続的に存在します。ファイルを「削除」すると、実際には削除を示す新しいリビジョンが作成されますが、ファイルは以前のリビジョンに引き続き存在します。

いくつかのダンプとロードを行いましたが、はるかに大きなリポジトリに移動しました。約 60,000 (!!!) リビジョン。時間はかかりましたが、最後に慎重にロードした後、リポジトリを再度構築します。

唯一の方法は、ファイルが追加、変更、および削除されたリビジョンを一覧表示することです。次に、間にあるリビジョンをダンプし、正しい順序でロードします。注意してください、間違いの余地はありません。間違えた場合は、最初からやり直す必要があります。最初からダンプ&ロード。

大きなファイルがそのような問題である場合は、履歴のない新しいリポジトリを作成することを検討してください。履歴比較のために古いものを保持し、新しいものから作業を開始します。

幸運を。

于 2010-02-01T14:49:30.010 に答える
0

ちょっと考えてみれば、リポジトリの現在の状態(現在のHEAD)は良好であると言います。つまり、大きなバイナリファイルは過去にsvndeletedされています。したがって、あなたの問題は純粋にリポジトリのサイズですか?

すべてのコミット履歴を保持したいとおっしゃっていたと思いますが、オプションとして、2つのダンプを実行できます。1つはリビジョン履歴全体に対して、もう1つは現在のHEADリビジョンに対してです。

たとえば、完全なダンプをDVDに入れると、必要に応じてデータを利用できるようになりますが、リポジトリ全体を削除してリビジョンダンプをロードし、小さなクリーンなリポジトリを残すことができます。

ヘッドだけでなく、特定のリビジョン以降をダンプすることもできます。たとえば、過去3か月のリビジョンを保持し、古いものをすべてDVDにダンプすることができます。

于 2010-02-01T16:22:46.390 に答える
0

これは別の問題ではないでしょうか。手順が追加されていますか? つまり、サイズが大きくバイナリであると思われるファイルを見つけて、それらが実際に SVN によって管理されているか、ローカルでビルドされているか (または、既に配置されている場合は並列アセット システムからインポートされているか) を確認する必要があります。

したがって、ファイルsvn infoを見つけて、それらがリポジトリの一部であるかどうかを確認するために実行してください。

于 2010-02-01T13:13:11.553 に答える