Reduzieren der Größe des .svn-Ordners

72

In unserem Projekt haben wir beschlossen, die Erstellungszeit durch Verwendung vorgefertigter Binärdateien zu reduzieren. Wöchentlich / monatlich erstellen wir eine stabile Version und legen sie im Repository fest. Der Build verwendet diese Binärdateien, anstatt alles aus dem Quellcode zu erstellen.

Für die Build-Geschwindigkeit ist dies fantastisch. Es ist jedoch nicht überraschend, dass die Größe der SVN-Kasse dadurch wirklich vergrößert wird. Unser Kofferraum hat derzeit eine Größe von ~ 22 GB. Mir ist klar, dass dies nicht die beabsichtigte Verwendung von Subversion ist. Aber wir haben im Moment keine Alternative.

Aber ich möchte die aktuelle Situation verbessern. Der .svnOrdner leistet einen großen Beitrag zur Größe des Trunks auf der Festplatte. Wenn die Binärdateien aktualisiert werden, scheinen sich mehrere Basen im Ordner .svn zu befinden. Das heißt, wenn eine Binärdatei 4 GB groß ist, befindet sich eine Kopie in der .svn. Wenn es aktualisiert wird, dann die.svn Ordner die ursprüngliche Basis plus die neue Basis und sperrt bis zu 8 GB für diese eine Datei.

Ist es möglich, Subversion .svnanzuweisen, für bestimmte Dateien keine Basis im Ordner zu behalten ? Über Google fand ich eine ähnliche Frage: Wie kann ich die Größe des .svn-Ordners verringern? .

Die Antwort, die Simon erhielt, war

  • Verwenden Sie eine teilweise Kaufabwicklung (die bei mir nicht funktioniert, da ich die Binärdateien benötige).
  • Dies ist noch keine Funktion von Subversion
  • Es wurde diskutiert, wird aber erst in Subversion 1.8 ein Feature sein

Zum Glück wurde Subversion 1.8 für mich veröffentlicht. Wurde diese Funktion hinzugefügt?

Ich habe es in den Versionshinweisen nicht bemerkt . "Directory and Property Storage Reduction" sieht jedoch vielversprechend aus.

Shane Gannon
quelle
1
Dies ist nicht wirklich der Punkt, an dem Subversion glänzt - Sie sollten nach Artefakten oder Nexus suchen, um die Artefakte zu speichern und sie mit Ihrem Build-Skript aufzulösen (abzurufen).
Thekbb
Leider wussten wir das. Aber es ist einfach so bequem, svn zu benutzen. In der Vergangenheit haben wir bei einem anderen Projekt Maven eingestellt. Aber anscheinend hinterließ das bei vielen Menschen einen schlechten Geschmack. Als nächstes kam ein benutzerdefiniertes Tool, das ich nur als Maven-like bezeichnen kann (das aber natürlich alle Maven-Probleme löste). Auch das hinterließ einen schlechten Geschmack. In unserem neuesten Projekt haben wir gerade svn eingesetzt.
Shane Gannon

Antworten:

73

Es gibt keine Möglichkeit, die Notwendigkeit, makellose Produkte aufzubewahren, zu beseitigen. Es wurde darüber gesprochen, aber es ist eigentlich kein leicht zu lösendes Problem, da es so viele verschiedene Anwendungsfallsituationen gibt, die durch optionales Entfernen entstehen würden.

Mit 1.7 wurde der makellose Speicher geändert und in einigen Fällen kann die Situation sogar schlechter sein als vor 1.7. Pristines werden jetzt in Dateien gespeichert, die durch den Hash des Pristines benannt sind. Wenn Sie also mehrere identische Dateien haben, werden keine doppelten makellosen Dateien gespeichert. Wir bereinigen jedoch auch nicht mehr makellos. Also bauen sie einfach weiter auf. Sie können nicht verwendete unberührte Objekte auslösen, mit denen sie entfernt werden sollen svn cleanup.

Es ist sinnvoll, nicht verwendete unberührte Objekte beizubehalten. Wenn Sie zwischen Zweigen wechseln, müssen Sie keine Dinge mehr herunterladen, für die Sie in 1.8 bereits die ursprünglichen Daten haben.

Ben Reser
quelle
Danke Ben. Ich vermutete, dass dies die Antwort sein würde. Aber ich hoffte anders, nehme ich an. Der SVN-Bereinigungstipp ist praktisch zu wissen. Wir vermuten, dass es die zusätzlichen makellosen entfernen könnte, aber noch nicht getestet wurde. Ich mag es, dass ein md5 verwendet wird, um nur eindeutige Kopien aufzubewahren. Aber alte Kopien nicht zu entfernen "scheint" falsch. Die Zweigumschaltung ist ein Szenario, das dieses Verhalten unterstützt. Aber ich "vermute", dass das alte Unberührte öfter nie wieder verwendet wird. dh es wird nur Speicherplatz verbrauchen. Obwohl unsere nicht empfohlene Verwendung von svn dies zu einem spürbaren Nachteil macht, denke ich, dass dies auch für normale Projekte gilt.
Shane Gannon
Wir sind uns einig, es gibt ein offenes Problem: subversion.tigris.org/issues/show_bug.cgi?id=4071
Ben Reser
2
Das ist großartig, zusammen mit svn update --set-depth = ausschließen das hat mir 12 GiB erspart .
JonnyJD
8
Wow hat gerade 21 GB Speicherplatz mithilfe der SVN-Bereinigung gespart. Vielen Dank!
NoAngel
Ich hatte Tonnen von Build-Artefakten gelöscht, die es niemals in die Versionskontrolle hätten schaffen dürfen, und mich gefragt, warum der Windows Explorer immer noch ~ 4 GB Ordnergröße meldete ... ein makelloser Bereinigungslauf hinterließ ~ 70 MB tatsächlich nützlicher Dateien :)
grek40
38

Wenn Sie den Bereinigungsbefehl des TortoiseSVN-Clients anstelle des svn cleanupBefehls verwenden, .svnkann die Ordnergröße verringert werden, indem Sie sicherstellen, dass die Option für makellose Vakuumkopien aktiviert ist:

Geben Sie hier die Bildbeschreibung ein

Es wird außerdem empfohlen, die Bereinigung auf der obersten Ebene der Arbeitskopie durchzuführen, wie hier angegeben .

[Bearbeiten]

Nach dieser Antwort und SVN Änderungsprotokoll , svn cleanuphat eine Option unberührte Kopien Vakuum ( /vacuum). Dies erfolgt standardmäßig ab 1.8. Ab Version 1.10 wird dies nicht mehr standardmäßig durchgeführt, sondern kann mit dem Befehl ausgeführt werden svn cleanup --vacuum-pristines(siehe diese Antwort ).

Alexei
quelle