Control de fuente: repositorys múltiples para el mismo proyecto

¿Es posible tener múltiples repositorys para el mismo proyecto?

Actualmente estoy usando SVN con TortoiseSVN con los repositorys en un disco duro externo en mi casa, y en lo que respecta a una solución de respaldo, esto no es ideal.

Entonces, lo que tengo en mente es crear una count con unfuddle y tener un segundo repository (el de mi casa es el primero) en el que pueda enviarme allí (incluso para una solución de respaldo remoto).

Ahora, por supuesto, quiero integridad en mi código y no quiero discrepancias entre los dos (¿o más?) Repositorios, lo que significa que ambos repositorys deberían actualizarse ambos cuando confirme mi código.

Entonces, ¿qué puedo hacer para que esto suceda?

Algo que tengo en mente es comprometerme con mi repository principal (el de inicio) y luego se compromete automáticamente con el repository en línea (el que no se desenrolla) automáticamente (porque, por supuesto, no quiero comprometerme manualmente con ambos repositorys cada vez que confirmar mi código)

Es posible ?

Todo es posible 🙂

EDITAR : la prisa nunca conduce a la calidad ni mi respuesta, y me faltan todas las references de Windows en la pregunta. Aquí hay un resumen de cómo hacer que la synchronization funcione en Windows.

Tienes 2 máquinas en este caso:

  • Máquina A: donde el repository se ejecuta ahora.
  • Máquina B: donde te gustaría sincronizar.

Cree un nuevo repository en B al que desee sincronizar desde A. Es muy importante que este repository esté en blanco (ejecutándose en rev0).

En B, en la carpeta SVN del repository recién creado, vaya a / hooks y cree los siguientes files BAT:

start-commit.bat

IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2 ) exit 1 goto :eof :label1 exit 0 

pre-revprop-change.bat

 IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2 ) exit 1 goto :eof :label1 exit 0 

someuser es un sincusor que existe en el repository de la máquina A y es el único usuario con derechos en el repository de la máquina B. Es muy importante que no se hagan commits manualmente para maquinar el repository de B.

En la carpeta /hooks del repository en la máquina A

post-commit.bat

 CD PATH_TO_SUBVERSION\bin svnsync sync svn://machineB/repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password machineBpassword 

Una vez que estos files por lotes estén en su lugar, necesitamos decirle al repository en B que queremos sincronizar con él:

svnsync initialize svn:// machineB /repos svn:// machineA /repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password máquinaBcontraseña

que debería devolver algo así como: Copied properties for revision 0.

Ahora, cada vez que se compromete con el repository en la máquina A, se copyrá en el repository de la máquina B.

Es muy importante tener en count que si desea sincronizar con Google Code u otro repository en línea, debe comprometer una estructura troncal / twigs / tags en la revisión 1. Debe ponerse en contacto con ellos para restablecer el repository si desea utilizar estos repositorys de terceros. location como el repository de synchronization.

Para dar crédito donde debo, copié el pre-revprop-change.bat y el start-commit.bat de http://www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9

Acabo de implementar esto en un repository de testing y parece funcionar como un encanto. Me alegro de haber notado esta pregunta, aunque svnsync se ha hundido demasiado en mi cráneo. Quise configurarlo cuando configuré svn en el trabajo. Así que sé lo primero que haré en el trabajo mañana, ¡gracias por eso!

EDICION 2:

Si usted, como yo, tiene toneladas de repositorys, este post-commit.bat genérico puede ser atractivo para usted:

 SET REPOS=%1 SET REV=%2 SET REPOS=%REPOS:D:\SVN=% CD "C:\Program Files\Subversion\bin" svnsync sync svn://machineB/%REPOS%-sync --non-interactive --no-auth-cache --source-username usernameA --source-password passwordA --sync-username usernameB --sync-password passwordB 

Esto capta el nombre del repository y lo usa para determinar dinámicamente la URL de synchronization. Sufrí todos mis repositorys de synchronization en la máquina B con -sync para mayor claridad. El bit D:\SVN es la raíz svnserve en machineB aunque este file BAT genérico debe colocarse en / hooks de la raíz svnserve de machineA .

No estoy seguro de haber entendido completamente tu problema, pero creo que lo que estás buscando es svnsync .

Puede tener su repository principal dentro del disco duro de su computadora portátil y un repository espejo en su escritorio / server doméstico.

Simplemente realice los cambios en el repository principal y luego sincronícelos con sus repositorys duplicates. Este process es incremental, por lo que solo se transfieren las revisiones desde la última synchronization, pero tenga cuidado con las properties no versionadas.

También es posible que desee echar un vistazo aquí y aquí .

Desde una perspectiva SVN pura, no, solo puedes tener una carpeta .svn que apunta a solo 1 repo en tu carpeta de trabajo.

Puedes utilizar post-commit-hooks en tu svn repo para intentar mantener ambos reposs sincronizados … pero realmente solo tienes la herramienta incorrecta si eso es lo que quieres.

El problema que estás describiendo es en esencia un sistema de control de versiones distribuidas como GIT. Lo que le permite realizar confirmaciones localmente y también enviarlas a un repository remoto.

Incluso podría usar GIT localmente y SVN como su repository remoto si así lo desea.

  • ver GIT para la herramienta
  • ver GitHub para alojamiento público gratuito