Actualmente estoy buscando la mejor manera de configurar un espejo SVN. Actualmente veo tres posibilidades, todas con sus propios inconvenientes:
- Tener un SVN post-commit-Hook que esté bloqueando y sincronizando a través de svnsync. El problema aquí es, obviamente, que la confirmación está bloqueando hasta que los datos se transfieren al espejo.
- Tener un SVN post-commit-Hook que no se bloquee y se sincronice a través de svnsync. Aquí veo el siguiente problema, más sutil: Imagina que alguien registra un archivo GRANDE, y otra persona poco después registra un archivo pequeño. Debido a que el commit no es de bloqueo, dos procesos de svnsync podrían ejecutarse al mismo tiempo y el archivo pequeño podría superar al archivo BIG en el camino hacia el espejo (esto parece muy crítico e improbable, aunque en principio es posible). Su revisión cambiaría.
- Sincronice como cada quince minutos con un cron-job. El mismo problema si una confirmación tarda más de 15 minutos y obviamente ese retraso de tiempo.
¿Olvidé una posibilidad? ¿Me equivoqué? ¿Algunas ideas? Gracias ya!
Quizás debería tener en cuenta que la segunda posibilidad es la sugerida por diferentes sitios web. Por ejemplo, ver http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync
Respuestas:
Podría intentar un enfoque similar al que usamos en Atlassian
https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727
descargo de responsabilidad: actualmente soy un empleado de Atlassian, pero no participé en la implementación de esta solución (solo mantenerla)
Como dije anteriormente en el comentario, svnsync, ejecutado desde un repositorio remoto se comporta de manera determinista. No puede aplicar conjuntos de cambios fuera de servicio. Entonces, el único problema que tiene al usar un repositorio remoto es la cantidad de retraso debido a la propagación del conjunto de cambios.
fuente