2010-12-31 11 views
5

¿Debería comprometerse solo si la solución se compila y compila con éxito? ¿Los compromisos "a mitad de camino" son aceptables en cambios muy grandes que dejan el código sin funcionar durante, digamos, unas pocas horas?Reglas de compromiso de SVN

Respuesta

10

Sí, es aceptable.

El control de versiones es para control de versiones; no copia de seguridad. Debería tener algo separado en su lugar para tratar con copias de seguridad de código compilable que, de hecho, podría dar la vuelta al sistema de control de versiones.

De cualquier manera obligando a los desarrolladores esperar para comprobar en el código es un desastre inminente de código perdido en algún momento.

+2

+1. Estoy de acuerdo. Comprometerse tan a menudo como sea posible. No lo pienses más. Simplemente comprométete todo lo que puedas. Encuentro que solo hay beneficios y no hay inconvenientes en comprometerse con frecuencia. – Upgradingdave

+1

+1. Estoy de acuerdo también No querrás que los desarrolladores salgan a desarrollarse en una cueva y luego arrojen una pila de bits y bytes a otros programadores mientras dicen "¡Diviértete!" Trabajé en una compañía que tenía una póliza si perdía más de un día o trabajaba (virus, disco duro se estrelló, laptop robada, etc.), dependiendo de las circunstancias y otros factores, podría ser una ofensa contra incendios. – jgifford25

+0

@ jgifford25 Eee-yikes !! Espero que hayas sido bien compensado por ese estrés ... Creo que me volvería loco al preocuparme ... –

5

Asegurar que el código no permanezca roto por mucho tiempo es el trabajo de continuous integration, no el control de la versión.

+0

e incluso si su empresa no cree en CI, puede ponerlo en una de sus máquinas (es solo una guerra en JEE y no lo ralentizará). – IAdapter

+0

Si su empresa tiene el control lo suficientemente monstruoso como para exigir que el tronco siempre compile, CI debería ser su sueño húmedo ... hace que ese tronco pueda compilar * y * los dedos como culpables en cuestión de minutos ... –

+0

Creo que la pregunta es establecer una política (por ejemplo, no debes cometer cambios bruscos "), no sobre el refuerzo técnico de esa política. –

5

Además de los comentarios de Brian y Aaron, solo añadiría que incluso esta compensación entre la estabilidad y el código actualizado se puede mitigar usando ramas o, como solución más extrema, un sistema descentralizado como Git. "Comprometerse a menudo y dejar que el robot de compilación encuentre errores" es mi política favorita, pero si necesita un lugar más estable para verificar el código, una rama es lo que quiere (pero, por supuesto, alguien tiene que mantenerla).

+0

Recomiendo esta metodología a los miembros de mi equipo. Elimina el temor a romper la compilación (ya que la rama de características no suele construirse automáticamente) a la vez que proporciona la seguridad de tener los cambios en el repositorio. También ayuda a mi equipo a aprender cómo fusionar mejor su código, ya que los animo a reintegrar sus propias ramas de características. – arcain

+0

@arcain ¿Está utilizando la gestión integrada de fusión de SVN? ¿Que tan bien funciona eso? Lo pregunto porque nos quemamos por una combinación desordenada hace unos meses, y nos quedamos atrapados clasificándolo a mano, ya que estábamos ejecutando una versión anterior de SVN. –

+1

Usamos TortoiseSVN, y nunca he tenido un fallo de combinación con un error, pero hemos tenido casos de error del operador por parte de un committer donde los commits accidentales a una rama necesitaban una reversión de solo unas pocas revisiones. La reintegración de la rama automáticamente no era una opción, ya que el rango de revisión completo no podía fusionarse con el padre, por lo que tuvimos que seleccionar los intervalos de revisión. En algunos de estos casos, era simplemente más fácil ignorar la rev fusionada en la copia de trabajo de la sucursal, marcar los conflictos como resueltos y simplemente fusionar manualmente los cambios. – arcain

3

En mi opinión, depende de la clase de VCS que se utiliza:

  • si estás usando un centralizado uno como SVN, yo suelo decir sí, es aceptable siguiendo Aarons argumentos.
  • si se está ejecutando un DVCS como Git, diría no, no es aceptable porque cada desarrollador puede hacer sus commits locales, probar la aplicación y luego empujar de nuevo a la (desnudo) de recompra pública una vez que su trabajo está hecho.

Puesto que usted ha insertado en cuestión SVN, siga Aaron.

1

En mi experiencia, es importante que al menos intente para no cometer cambios bruscos. Más aún si el equipo es más grande, o el ritmo de desarrollo es más rápido. La idea es que todos los miembros del equipo estén al día con los últimos cambios. Nadie debería tener miedo de hacer un svn update después de cada compromiso por un miembro del equipo.

Esto es imposible si la última versión tiene regularmente errores de compilación. Incluso una prueba fallida puede ser molesta, porque no siempre es fácil determinar si un problema fue introducido por sus cambios no confirmados o los que acaba de recibir por el svn update. El trabajo se detiene cuando todos intentan descubrir por qué las cosas ya no funcionan.

Los cambios de interrupción también interferirán con su capacidad de bisect the source code history. Por lo tanto, incluso si trabaja solo o en sucursales especiales, puede ser valioso evitarlas.

Una política para evitar los cambios no tiene que contradecir con compromisos pequeños regulares. Los grandes cambios casi siempre se pueden dividir en una lista de tareas más pequeñas, cada una de las cuales se puede completar con una comisión de tamaño modesto que no rompa la construcción.Esto tiene la ventaja adicional de que los conflictos se reducen. Tiendo a poner las cosas como esta en mi los mensajes de confirmación para tales tareas más pequeñas:

  • hacia la fijación de xyz: refactorizado pelusa en preparado de foo aspecto
  • hacia la fijación de xyz: aspecto foo ahora funciona
  • fijo xyz: aspecto ba r ahora funciona
Cuestiones relacionadas