Freigeben von Speicherplatz in meinem SVN-Repository

8

Ich habe ein SVN-Repository, das auf einer Freemium-Site mit einer maximalen Repository-Größe gehostet wird. Wenn ich mich dieser Kapazität nähere, sind mir Dateien bekannt, die ich eingecheckt habe und die ich dauerhaft entfernen kann, um Speicherplatz freizugeben. Wie kann ich SVN mitteilen, dass eine Datei nicht nur gelöscht werden kann, sondern auch im Verlauf?

fbrereto
quelle

Antworten:

7

Wie Hubert sagt, svnadmin packwerden alle einzelnen Repo-Dateien in einem Verzeichnis in eine einzige große Datei gepackt. Dies spart Ihnen etwas Platz, verschiebt aber nur den Tag der Abrechnung für Sie. (Es sollte jedoch die Verlaufsoperationen beschleunigen, daher ist es trotzdem ein guter Vorschlag). Zu beachten ist, dass es nur für Sharded-Verzeichnisse funktioniert (dh die neue Verzeichnisstruktur besteht darin, 1000 Revisionen in einem einzigen Verzeichnis abzulegen und dann ein neues Verzeichnis zu starten) und nur die alten Shard-Verzeichnisse packt, nicht das mit der aktuellen Revision drin.

Sie können also nur alte Revisionen aus Ihrem Verlauf löschen. Dies erfordert das Speichern und Laden von svnadmin , optional mit einem Filter zum Entfernen von Verzeichnissen in Ihrem Repo, die Sie nicht mehr benötigen. (zB alte temporäre Zweige).

Das Speichern ist einfach: svnadmin dump -r xxx:HEADDabei ist xxx die älteste Revision, die Sie behalten möchten (dh, die neuesten werden gelöscht, sodass Ihre alte Revision wie die Archivierung verworfen wird). Sie können das Archiv der alten Revisionen behalten, indem Sie sie auch sichern ( svnadmin dump -r 1:xxx)

Sobald Sie Ihr Dumpfile haben, ist das Laden so einfach wie das Ausführen von svnadmin load , das den Namen des Dumpfiles übergibt. Es ist möglicherweise eine gute Idee, das alte Repo vor dem Laden des neuen zu löschen. Dann profitieren Sie von den neuesten Eigenschaften des Server-Dateisystems, sofern Sie diese noch nicht haben.

Wenn Sie alle alten Revisionen beibehalten , aber bestimmte Verzeichnisse herausfiltern möchten, sollten Sie das Dumpfile über svndumpfilter ausführen , wodurch die angegebenen Pfade entfernt werden. Beachten Sie, dass Sie einen Dump erstellen möchten, ohne die Option --incremental zu verwenden.

Testen Sie natürlich alle Vorgänge lokal - sichern Sie sie in eine lokale Datei, laden Sie sie dann in ein temporäres Repo auf Ihrem lokalen Laufwerk (es wird auch schneller sein) und testen Sie, ob der Verlauf und die neueste Version in Ordnung sind. Ich exportiere die neueste Version in eine Verzeichnis und verwenden Sie Winmerge, um zu überprüfen, ob die Dateien mit einem Export der neuesten Version aus dem Live-Repo identisch sind. Versuchen Sie es auch mit einer historischen Revision, wenn Sie paranoid sein möchten.

gbjbaanb
quelle
3

Aus den Subversion-FAQ :

Das Projekt hat Pläne ... eines Tages einen Befehl zum Löschen von svnadmin zu implementieren, der die Aufgabe des dauerhaften Löschens von Informationen erfüllen würde.

...

In der Zwischenzeit besteht Ihre einzige Möglichkeit darin, svnadmin Ihr Repository zu sichern und dann das Dumpfile durch svndumpfilter (mit Ausnahme des fehlerhaften Pfads) in einen svnadmin-Ladebefehl zu leiten.

nedm
quelle
2

Sie können eine Datei nicht aus dem SVN-Repository entfernen, ohne den svnadmin dump; svndumpfilter; svnadmin loadTanz auszuführen. Sie können die Größe des Repositorys reduzieren, wenn Sie FSFS verwenden. Führen Sie es einfach svnadmin packim Repo-Verzeichnis aus.

Hubert Kario
quelle
0

Im Allgemeinen ist es eine schlechte Idee, Dateien aus einem Repository unter Versionskontrolle zu entfernen.

Ich bin mir nicht sicher, ob ich es richtig verstanden habe, aber so verstehe ich es. Bei der Versionskontrolle geht es um eindeutige Prüfsummen. Wenn Sie etwas entfernen, besteht die Gefahr, dass diese Prüfsummen wiederverwendet werden, was zu Konflikten führt. Es lohnt sich einfach nicht, ein Problem mit wenig Speicherplatz auf diese Weise zu verringern und Ihren Datenplan besser zu aktualisieren.

halp
quelle