2012-04-07 9 views
1

私は自分自身で脚本を書くことができるサイトを持っています。Linuxサーバー上のApache SVNから古いリビジョンをアーカイブする方法

この脚本はリビジョンの形で保存されています。

Apache SVNがインストールされています。

すべてのユーザーのドキュメントの最後の5つのリビジョンのみを保存します。

しかし、問題はバックエンドで、すべてのリビジョンが「Docsrepo」という1つのフォルダに保存されており、1つのフォルダに1000リビジョンとして分類されています。このように234のフォルダがあります。

意味234 * 1000リビジョン。

ここでは、このリビジョンのすべてをアーカイブして、各ドキュメントの最後の5つのリビジョンだけを残したいと思います。

どうすればよいですか?

+1

SVNにはすべてのリビジョンの完全コピーが保存されておらず、相違点のみが保存されています。だから私はあなたが何を記述しているのか分からない。 –

+1

また、表示されている '1000'は、そのフォルダ内のリビジョンの実際の数ではありません。ファイルシステム内のSVN "シャード"リビジョンは、SVNがリビジョン番号687を処理する必要がある場合、 '1000'フォルダを参照する必要があることをSVNが容易に知る方法です。リビジョン番号3465、それは '3000'フォルダを見るはずです。等々。 –

答えて

0

ユーザが新しいリビジョンをチェックインするときに最も古いリビジョンを削除できるように、SVNにフックを追加することは可能かもしれません。しかし、あなたは、SVNが各スクリプトの完全なコピーを1000 * 234コピーしていないことを認識していますか? SVNは各バージョンの違いを保存するだけです。

0

フォルダを見ると、各リビジョンが別々のファイルとして保存されていることがわかるので、サイズを確認できます。それらのファイルのそれぞれは、本当に小さくすべきであるように、チェックインの間にデルタまたは差分を実際に格納しています。

SVNのそれ以降のバージョンでは、1つのフォルダ内のすべてのファイルを1つの大きなファイルにまとめた 'svnadmin pack'コマンドを実行できます。これは、OSが1つのファイルをより良くキャッシュできるようにパフォーマンスを向上させますが、フルの古いフォルダ、つまり追加されない古いフォルダでのみ機能します。その実行は安全ですし、好きなだけ実行することができます(チェックインごとに実行する人もいれば、毎週または毎月実行する人もいます)。

各ファイルに以前のリビジョンとの相違点だけが表示されているので、古いファイルを削除することはできません。したがって、古いファイルを削除した場合、SVNは、時間の経過と共にすべての変更に基づいて合計ファイルを作成します。

これには少し複雑です。 SVNはskip-deltasというものを使用しています。これは以前のすべての相違点のロールアップを格納する 'チェックポイント'です。これはパフォーマンスが大幅に向上することを意味します。ただし、各ファイルを再作成できることがわかっていない限り、古いファイルを削除することはできません(実際のチェックインが各ファイルに何回発生したかは分かりません)。


..だからあなたの質問に答えるために取得する:

あなたは古代のファイルを無視して、リポジトリをダンプして読み込むことができます。これには、svnadmin dumpコマンドとsvnadmin loadコマンドが含まれます。 You dump the repo into a dumpfile最後の5つのリビジョン番号のみを使用し、ダンプファイルを新しいレポにロードします。 (私は日付に基づいてダンピングのオプションもあると思う)。

各ファイルの最新の5つのリビジョンを保持することはできません。リビジョンの範囲をダンプすることしかできません。

明らかにこれは手動の管理タスクであり、通常は誰も見られない古代のリビジョンを削除するために使用されます。自動「最後の5つのリビジョンを維持する」オプションはありません。 リビジョンを削除する必要はありませんが、SVNはパフォーマンスを速く保ち、デルタが小さいので、履歴を削除する必要はありません。実際にディスク容量が不足している場合は、ダンプ/ロードオプションが最適です。

関連する問題