最大リポジトリサイズのフリーミアムサイトでホストされているSVNリポジトリがあります。この容量に近づくと、チェックインしたファイルに気づき、ディスク領域を解放するために完全に削除できることがわかっています。ファイルを削除できるだけでなく、履歴もSVNに通知するにはどうすればよいですか?
ヒューバートが言うように、svnadmin pack
は、ディレクトリ内のすべての個別のリポジトリファイルを1つの大きなファイルにパックします。これはあなたにいくらかのスペースを節約します、しかしそれはあなたのために計算の日を延期するだけです。 (ただし、履歴の操作が速くなるはずなので、とにかく良い提案です)。注意すべきことの1つは、シャードされたディレクトリでのみ機能し(つまり、新しいディレクトリ構造は、1000のリビジョンを1つのディレクトリに入れ、次に新しいディレクトリを開始することです)、現在のリビジョンのディレクトリではなく、古いシャードディレクトリのみをパックします。初期化。
したがって、あなたの唯一の選択肢は、履歴から古いリビジョンを削除することです。これには svnadmin dump とロードが必要であり、オプションで、不要になったリポジトリ内のディレクトリを削除するためのフィルターを使用できます。 (例えば、古い一時的なブランチ)。
ダンプするのは簡単です:svnadmin dump -r xxx:HEAD
ここで、xxxは保持する最も古いリビジョンです(つまり、これは最新のものをダンプするため、アーカイブのように古いリビジョンは破棄されます)。古いリビジョンのアーカイブも保持することができます(svnadmin dump -r 1:xxx
)
ダンプファイルを取得したら、次のコマンドを実行するだけで簡単にロードできます svnadmin load ダンプファイル名を渡す。新しいリポジトリをロードする前に古いリポジトリを削除することをお勧めします。まだ持っていない場合は、最新のサーバーファイルシステムプロパティを利用できます。
すべての古いリビジョンを保持したいが特定のディレクトリをフィルターで除外したい場合は、ダンプファイルを svndumpfilter で実行すると、指定したパスが削除されます。 --incrementalオプションを使用せずにダンプしたいことに注意してください。
明らかに、すべての操作をローカルでテストします-ローカルファイルにダンプし、それをローカルドライブの一時リポジトリにロードし(それも高速になります)、履歴と最新バージョンが機能することをテストします-最新リビジョンをディレクトリとwinmergeを使用して、ファイルがライブリポジトリからの最新リビジョンのエクスポートと同一であることを確認します。偏執狂になりたい場合は、歴史的な改訂版も試してください。
Subversion FAQ から:
プロジェクトには、いつかsvnadmin obliterateコマンドを実装して、情報を完全に削除するタスクを実行する計画があります。
...
その間、あなたの唯一の手段は、リポジトリをsvnadminダンプし、ダンプファイルをsvndumpfilter(不正なパスを除く)を通してsvnadmin loadコマンドにパイプすることです。
svnadmin dump; svndumpfilter; svnadmin load
ダンスを行わないと、SVNリポジトリからファイルを削除できません。 can FSFSを使用している場合は、リポジトリのサイズを小さくします。リポジトリのディレクトリでsvnadmin pack
を実行するだけです。
一般に、バージョン管理下のリポジトリからファイルを削除することはお勧めできません。
私はそれが正しいかどうかはわかりませんが、これは私がそれを理解する方法です。バージョン管理は、固有のチェックサムに関するものです。何かを削除すると、これらのチェックサムが再利用されるリスクがあり、競合が発生します。この方法でディスク容量不足の問題を軽減し、データプランをより適切にアップグレードすることは、単に価値がありません。