Der beste Weg, um einen SVN-Spiegel zu erstellen?

8

Ich suche derzeit nach dem besten Weg, um einen SVN-Spiegel einzurichten. Ich sehe derzeit drei Möglichkeiten, die alle ihre eigenen Nachteile haben:

  • Haben Sie einen SVN-Post-Commit-Hook, der über svnsync blockiert und synchronisiert. Das Problem hierbei ist offensichtlich, dass das Commit blockiert wird, bis die Daten an den Spiegel übertragen werden.
  • Haben Sie einen SVN-Post-Commit-Hook, der nicht blockiert und über svnsync synchronisiert. Hier sehe ich das folgende, subtilere Problem: Stellen Sie sich vor, jemand checkt eine BIG-Datei ein und jemand anderes checkt kurz danach eine kleine Datei ein. Da das Commit nicht blockiert ist, können zwei svnsync-Prozesse gleichzeitig ausgeführt werden und die kleine Datei kann die BIG-Datei auf dem Weg zum Spiegel überholen (dies scheint sehr zeitkritisch und unwahrscheinlich, obwohl dies im Prinzip möglich ist). Ihre Überarbeitung würde tauschen.
  • Synchronisieren Sie wie alle fünfzehn Minuten mit einem Cron-Job. Gleiches Problem, wenn ein Commit länger als 15 Minuten dauert und offensichtlich diese Zeitverzögerung.

Habe ich eine Möglichkeit vergessen? Habe ich etwas falsch gemacht? Irgendwelche Ideen? Danke schon!

Vielleicht sollte ich beachten, dass die zweite Möglichkeit die von verschiedenen Websites vorgeschlagene ist. Siehe z. B. http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync

roesslerj
quelle
Da das Commit nicht blockiert ist, können zwei svnsync-Prozesse gleichzeitig ausgeführt werden und die kleine Datei kann die BIG-Datei auf dem Weg zum Spiegel überholen (dies scheint sehr zeitkritisch und unwahrscheinlich, obwohl dies im Prinzip möglich ist). Ihre Überarbeitung würde tauschen. Dies ist nicht möglich. Svnsync repliziert Commits, während sie in das Repository geschrieben werden. Sie werden immer in der Reihenfolge der Überarbeitung angezeigt.
Dave Cheney

Antworten:

3

Sie könnten einen ähnlichen Ansatz wie bei Atlassian ausprobieren

https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

Haftungsausschluss: Ich bin derzeit ein Mitarbeiter von Atlassian, war jedoch nicht an der Implementierung dieser Lösung beteiligt (nur deren Wartung).

Wie ich oben im Kommentar sagte, verhält sich svnsync, das von einem Remote-Repository ausgeführt wird, deterministisch. Es können keine Änderungssätze außerhalb der Reihenfolge angewendet werden. Das einzige Problem bei der Verwendung eines Remote-Repositorys ist die Verzögerung aufgrund der Weitergabe von Änderungssätzen.

Dave Cheney
quelle
+1 für die Beobachtung, dass svnsync nicht außer Betrieb geraten kann, ist das einzige Problem die mögliche Latenz.
Jim T
Sie haben vollkommen recht ... Ich habe einen dummen Denkfehler gemacht. Der einfache und schöne SVN-Post-Commit-Hook sollte dies in den meisten Fällen tun. Falls die Latenz ein Problem darstellt, können Sie sich den Artikel von Atlassian ansehen, auf den verwiesen wird. Vielen Dank!
Roesslerj
Beachten Sie jedoch, dass der Post-Commit-Hook den Committer blockiert, bis der Hook vollständig ausgeführt wurde. Ich bin nicht sicher, was passiert, wenn der Post-Commit-Hook fehlschlägt. Ich glaube nicht, dass das Commit zurückgesetzt wird, aber es wird zumindest verwirrend sein.
Dave Cheney
Nun, mit dem Post-Commit-Hook können Sie einen Befehl ausgeben, der sofort zurückgegeben wird (z. B. über 'command &' unter Linux), ohne dass er blockiert. Da der Hook nach dem Festschreiben ausgeführt wird, kann das Festschreiben nicht rückgängig gemacht werden. Wenn svnsync fehlschlägt, muss der nächste svnsync zwei Revisionen synchronisieren, was einfach der Fall ist. Das hier auftretende Problem würde ich unter dem Thema Latenz ablegen.
Roesslerj