2011-01-19 11 views
9

Actualmente tengo un repositorio svn en mi servidor web alojado. Trabajo localmente, envío mis cambios al repositorio en mi servidor y luego ejecuto una "actualización svn" a través de ssh en mi carpeta en vivo cuando estoy listo para enviar los cambios en vivo.Uso de SVN con un sitio web en vivo y en vivo

Ahora estoy agregando un sitio de ensayo, que residirá en el mismo servidor. Simplemente será otra carpeta en el mismo servidor.

El problema es que voy a trabajar en cambios algo más grandes para el sitio en el servidor de transición que puede tomar hasta una semana de prueba. Durante ese tiempo, es posible que desee realizar un pequeño cambio cosmético en el sitio en vivo que no requiere pruebas. Tomemos un ejemplo:

  1. asumir mi locales, puesta en escena, y el sitio en vivo todos comienzan en la revisión 1.
  2. hago cambios importantes a nivel local, cometerlos, y actualizar mi servidor de ensayo. Local y en etapas están en la revisión 2, en vivo todavía está en 1.
  3. Alguien pide un cambio de texto simple en el sitio en vivo.
  4. Ugh. Ahora tengo que revertir mi copia local a la revisión 1, hacer el pequeño cambio y confirmarlo. Ahora actualizo el sitio en vivo a la revisión 3, que tiene el pequeño cambio.
  5. Quiero seguir trabajando en mis principales cambios, así que actualizo mi copia local a la revisión 2 y sigo trabajando.
  6. Y así sucesivamente ....

Esto me obliga a no perder de revsions y constantemente actualizando y revirtiendo. ¿Hay una mejor manera? Siento que debería usar ramificaciones y etiquetas aquí, pero no entiendo cómo exactamente.

Gracias, Jonás

Respuesta

9

Administro una tienda de desarrollo que consta de 5 desarrolladores. Utilizamos SVN de la siguiente manera para nuestro sitio web:

  • desarrolladores suben todas las mejoras o correcciones de errores a nuestra rama 'dev' antes de marcar un trabajo tan completo.
  • Los trabajos se prueban en una caja de etapas con el código más reciente en la rama de desarrollo.
  • Una vez que un trabajo pasa la prueba, las revisiones para ese trabajo se combinan en nuestra sucursal troncal.
  • Nuestros servidores web activos ejecutan la rama troncal. Periódicamente, se actualizan a través de un script 'publicar' que actualiza SVN en los servidores activos y también hace otras cosas (como ofuscar y minimizar CSS y JavaScript).

Esto permite que los pequeños errores pasen rápidamente por la tubería y los trabajos más grandes tomen tanto tiempo como necesiten en el desarrollo y las pruebas.

Dado que cada desarrollador es responsable de fusionar sus propios trabajos y cada combinación consiste en un conjunto más pequeño de cambios de código, funcionan sin problemas. Es mucho menos agitado que el patrón anterior de tener un administrador de combinación crear una rama de mejora importante para un conjunto de mejoras. Como otros desarrolladores suelen trabajar juntos en un conjunto de mejoras, terminarías con un administrador de combinación que fusionó un código que no escribieron, lo que se vuelve particularmente frustrante cuando tienes conflictos de fusión.

De hecho, este método refleja los métodos que los sistemas de control de versiones como Git y Mercurial intentan promover a través de cómo estructuran sus repositorios. Con esos sistemas de control de versiones, cada desarrollador tiene su propio repositorio "local". Cuando quieren cambios de otro 'repositorio', tienen que fusionarlos con su código local y luego comprometer una versión 'fusionada' válida.

También puede utilizar el etiquetado como Andy mencionó en su respuesta a esta pregunta. Puede funcionar para usted, pero prefiero responsabilizar a los desarrolladores que escriben el código en lugar de a un desarrollador senior central o administrador de publicación. Tienden a ir más suavemente de esa manera.

+0

+1 para su método. Creo que su método es probablemente más adecuado para sitios web. Utilizo mucho el etiquetado porque es fundamental que mi equipo siempre obtenga el código exacto para cualquier cosa que se haya lanzado alguna vez, pero puedo ver que este no es realmente un requisito tan difícil para la mayoría de los sitios web. –

+0

@Andy: De hecho. Un sitio web activo ve tantos ajustes y publicaciones a lo largo de su vida que el aislamiento de las correcciones de errores con las ramas provoca una sobrecarga sustancialmente mayor.Su método es más adecuado para proyectos que tienen distintas 'versiones' que podrían estar fuera del campo, por supuesto. Sin embargo, para un proyecto que ve muchos pequeños cambios y para el cual solo hay una sola 'versión', la distinción de etiquetar y bifurcar cada corrección de errores es menos útil. – Shaun

1

Como ya identificado la mejor manera de hacer esto es utilizando ramas y etiquetas. Un buen ejemplo de cómo hacer esto sería el siguiente.

desarrollo importante

  1. Usted hace su mayor desarrollo en el tronco.
  2. Cada vez que suelte una copia de su software para vivir, cree una etiqueta del tronco y cambie su sitio web para que apunte a la nueva etiqueta.

Cuando tenga que hacer un pequeño cambio de vivir que ahora puede hacer lo siguiente:

  1. crear una rama de la etiqueta activa, y hacer el trabajo aquí.
  2. Una vez que esté satisfecho con este cambio, cree una nueva etiqueta de esta rama y cambie su copia de trabajo en vivo a la nueva etiqueta.
  3. También puede combinar este cambio de la rama en el tronco para que este cambio también se encuentre en su próxima versión principal.

Hay un libro muy bueno sobre la subversión tarifa que explica todo esto en absoluto detalle aquí:

http://svnbook.red-bean.com/

Si usted puede encontrar el tiempo me gustaría sugerir fuertemente una lectura.

+0

Andy, ¿la copia local real con la que estoy trabajando en mi latptop cambiará constantemente de una rama a otra, dependiendo de en qué estoy trabajando? – Jonah

+0

Con el método de Andy, necesitaría crear y realizar cambios en una nueva sucursal en su sistema local para cada cambio pequeño, luego combinarlo. Sus principales cambios se producirían en el enlace troncal, y usted 'liberaría' marcando el enlace troncal, luego actualizando sus servidores de producción a esa etiqueta. – Shaun

+0

@Jonah: tendría más de una copia de trabajo desprotegida. Por ejemplo, si tengo un proyecto 'foo', entonces podría tener' C: \ Projects \ Foo \ Trunk' y 'C: \ Projects \ Foo \ v1.1-Bugfix' desprotegidos al mismo tiempo (donde 'c: \ Projects \ Foo' no está bajo control de versión). –

Cuestiones relacionadas