Il modo migliore per creare un mirror SVN?


8

Attualmente sto cercando il modo migliore per impostare un mirror SVN. Attualmente vedo tre possibilità tutte con i loro svantaggi:

  • Avere un hook post-commit SVN che sta bloccando e sincronizzando tramite svnsync. Il problema qui è ovviamente che il commit sta bloccando fino a quando i dati non vengono trasferiti sul mirror.
  • Disponi di un hook post-commit SVN che non blocchi e si sincronizzi tramite svnsync. Qui vedo il seguente problema più sottile: immagina che qualcuno controlli in un file BIG e qualcun altro poco dopo controlli in un file piccolo. Poiché il commit non è bloccante, due processi svnsync potrebbero essere in esecuzione contemporaneamente e il piccolo file potrebbe superare il file BIG sulla strada per il mirror (questo sembra molto critico in termini di tempo e improbabile, sebbene possibile in linea di principio). La loro revisione cambierebbe.
  • Sincronizzazione come ogni quindici minuti con un cron-job. Stesso problema se un commit richiede più di 15 minuti e ovviamente quel ritardo.

Ho dimenticato una possibilità? Ho sbagliato qualcosa? Qualche idea? Grazie già!

Forse dovrei notare che la seconda possibilità è quella suggerita da diversi siti web. Ad esempio, consultare http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync


Poiché il commit non è bloccante, due processi svnsync potrebbero essere in esecuzione contemporaneamente e il piccolo file potrebbe superare il file BIG sulla strada per il mirror (questo sembra molto critico in termini di tempo e improbabile, sebbene possibile in linea di principio). La loro revisione cambierebbe. Questo non è possibile, svnsync replica esegue il commit mentre vengono scritti nel repository. Appariranno sempre in ordine di revisione.
Dave Cheney,

Risposte:


3

Potresti provare un approccio simile a quello che usiamo in Atlassian

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

dichiarazione di non responsabilità: attualmente sono un dipendente Atlassian, ma non sono stato coinvolto nell'implementazione di questa soluzione (solo per la sua manutenzione)

Come ho detto sopra nel commento, svnsync, eseguito da un repository remoto si comporta in modo deterministico. Non può applicare i changeset fuori servizio. Quindi l'unico problema che hai usando un repository remoto è la quantità di ritardo dovuta alla propagazione del changeset.


+1 per l'osservazione che svnsync non può uscire dall'ordine, l'unico problema è la potenziale latenza.
Jim T

Hai perfettamente ragione ... Ho fatto uno stupido errore di pensiero. Quindi il semplice e bellissimo hook post-commit SVN dovrebbe farlo nella maggior parte dei casi. Nel caso in cui la latenza sia un problema, si può dare un'occhiata all'articolo di riferimento di Atlassian. Grazie mille!
roesslerj

Basta essere consapevoli del fatto che l'hook post commit bloccherà il committer fino al completamento dell'hook. Non sono sicuro di cosa succede se l'hook post commit fallisce, non penso che il commit sia stato ripristinato, ma sarà almeno confuso.
Dave Cheney,

Bene, usando l'hook post-commit, puoi emettere un comando che ritorna immediatamente (ad es. Tramite 'command &' su linux), avendo il suo non blocco. Poiché l'hook è post-commit non può eseguire il rollback del commit. Se svnsync fallisce, il prossimo svnsync deve sincronizzare due revisioni, cosa che fa semplicemente. Il problema che si verifica qui vorrei archiviare sotto la latenza dell'argomento.
roesslerj
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.