2009-02-24 21 views
19

Me gustaría saber cómo puedo configurar dos repositorios para mi única copia de trabajo. Necesito un repositorio en mi servidor, para que pueda registrar mi entrada/salida entre dos equipos; Necesito otro repositorio en mi PC local, de modo que pueda ver el resultado de diff rápidamente (mi servidor svn está en un host lento compartido)SVN: ¿una copia de trabajo, dos repositorios?

¿Cómo puedo hacer eso?

+0

Esto es útil para proyectos de código abierto cuando se envía un parche, pero no quiere esperar a que sea aprobado antes de construir otro. – dbkk

+0

La mayoría de los proyectos actualmente usan Git, lo que hice fue clonar un repositorio de GIT y Subversion'ed. Puedo actualizar la copia de Git y mantenerla actualizada, así como también mantener mis cambios, aunque con menos conflictos. ¡Pensé que te daría un consejo! – asyncwait

+0

posible duplicado de [¿Puedo tener un proyecto en dos repositorios SVN?] (Http://stackoverflow.com/questions/425975/can-i-have-one-project-in-two-svn-repositories) – JasonMArcher

Respuesta

11

Eche un vistazo a repository replication.

Puede configurar una tarea cron para sincronizar periódicamente de un repositorio a otro. Pero debes asegurarte de que los commits solo sucedan a uno de los dos.

Si los commits pasarán a ambos repositorios, tal vez un sistema de control de versiones distribuido como git, Bazaar o Mercurial es más en su camino? Git, por su parte, incluso te permite sacar y empujar directamente a un repositorio de Subversion.

1

Si su caja local es linux, puede crear una entrada de crontab para svn actualizar cada X minutos para mantenerlo sincronizado con el servidor en segundo plano. Desde allí tendrías que copiar la copia más reciente en tu servidor svn local.

7

Subversion no utiliza el acceso a la red para su funcionamiento de diff. Este es uno de los grandes beneficios de Subversion sobre CVS. Así que no estoy seguro de por qué estarías enfrentando ese problema específico.

Una alternativa es usar Git y específicamente git-svn en su PC local. Obtendrás una copia completa de todo el historial del repositorio en tu máquina local, con la posibilidad de modificar y ver el historial localmente (junto con muchas otras características que Git te brinda). Siempre que sea posible, ahora uso git-svn para acceder a los repositorios de Subversion.

+1

Es solo una operación local de diferir la versión local a la copia de trabajo original. Si difiere de las revisiones anteriores, entonces es una operación remota. – Evan

+0

De acuerdo, la diferenciación local era si lo hacía el 90% del tiempo, pero la pregunta no especificaba eso definitivamente. – Evan

3

Si no tiene que usar SVN, es mejor usar un sistema de control de versiones distribuidas, como Mercurial o Git. Cada PC tendrá su propia copia del repositorio, y los cambios se pueden sincronizar directamente entre las PC o a través de otra copia en un servidor central. Como cada PC tiene el repositorio completo almacenado localmente, puede hacer diff o cualquier otra operación sin acceso a la red.

1

Puede intentar usar svk como su cliente local en lugar de svn. Svk es un sistema de control de versiones pseudo distribuido que usa repositorios svn.

Debería usar svk para configurar un espejo del repositorio, sincronizarlo, y puede diferir el contenido de su corazón, tantas revisiones como quiera y todo es local.

También puede hacer una rama del repositorio de espejos y usar eso como su salida, a continuación, sus confirmaciones son también un local de la operación sólo y cuando esté listo con un lote de confirmaciones que los empujan a la SVN remoto repositorio (y arrastrar hacia atrás el otro usuario, similar a un comando svn update).

Dos advertencias:

  1. estar preparado para utilizar la línea de comandos. No hay TortoiseSVK u otra GUI que yo sepa.
  2. Solo he usado svk en linux. Si está usando Windows, no estoy seguro de qué tan bueno es el cliente.

Aparte de eso, utilicé bazaar, mercurial o git como otros han sugerido. Bazaar es probablemente el más fácil de usar, y tiene una interfaz gráfica de usuario de TortoiseBzr que un colega mío dice que es bastante sólida.

Git es el más difícil de usar. Es como el cuchillo de ejército suizo que es casi más ancho que largo, con todos los pequeños artilugios y drogadictos y colgando de él, con los muelles tan apretados que ocasionalmente se abre un dedo para intentar apretar una cuchilla fuera.

+0

+1 analogía cuchillo suizo suizo –

0

No estoy seguro de que la replicación de repositorio estándar le proporcione lo que desea. Con esa configuración, un proxy siempre es de solo lectura, y no creo que en su situación ese sea el caso.

Tendría que hacer el cambio de svn --localizar para cambiar el repositorio que está buscando justo antes de registrarse. Algo propenso a errores.

Lo que buscas es un write through proxy.

Si configura esto usando apache y mod_svn_dav en su máquina local, tendrá un repositorio local que recibirá todas las actualizaciones y que puede comparar y comparar fácilmente, pero para el cual todas las escrituras vuelven a la real repositorio que todos los demás están usando y obteniendo actualizaciones de.

0

El resultado de svn diff no depende de la velocidad de su conexión al servidor; es una operación completamente local.

1

SVN no es inherentemente adecuado para tales casos de uso. Tendrás que retocar cosas aquí y allá (como escribir crones). Si quieres algo que funcione de la caja para adaptarse a tales casos de uso, prueba GIT.

Cuestiones relacionadas