Pregunta

Estoy tratando de crear y seguir las mejores prácticas para el control de versiones y encontré una referencia a las confirmaciones atómicas en Subversion. Como nunca he oído hablar de esta acción, tengo algunas preguntas al respecto.

  • ¿Cuál es su propósito?
  • ¿Cuándo debería usarse?
  • ¿En qué se diferencia de una confirmación normal?
  • ¿Está disponible para usuarios de TortoiseSVN ? Si es así, ¿cómo?
¿Fue útil?

Solución

No hay un comando especial para las confirmaciones atómicas. Cada commit en Subversion es atómico.

Significa que cada confirmación (de cualquier número de archivos) tendrá éxito o fallará en su conjunto.
No es posible que solo algunos de los archivos comprometidos lleguen al repositorio y otros no (por ejemplo, debido a un error que ocurrió en el medio de la operación de confirmación o un conflicto en uno de los archivos).

Esto es lo mismo para TortoiseSVN, ya que se basa en el " normal " Funcionalidad de Subversion.


Lo siguiente es un extracto del libro de Subversion :

  

Se publica una operación de confirmación svn   cambios a cualquier número de archivos y   directorios como un solo atómico   transacción. En su copia de trabajo, usted   puede cambiar el contenido de los archivos; crear,   eliminar, renombrar y copiar archivos y   directorios; y luego cometer un   conjunto completo de cambios como un atómico   transacción.

     

Por transacción atómica, queremos decir simplemente   esto: o todos los cambios suceden   en el repositorio, o ninguno de ellos   sucede Subversion intenta retener   esta atomicidad frente al programa   fallas, fallas del sistema, red   problemas y acciones de otros usuarios.

Otros consejos

La idea es simplemente que los cambios en un archivo generalmente están relacionados con cambios en otro. Algunos sistemas de control de versiones anteriores en realidad no manejaban varios archivos en una confirmación (como una confirmación atómica como lo llamas) o lo hicieron mal.

No tienes que hacer nada especial para esto. Así es como funciona Subversion. Pero con Subversion tiene la opción de registrar un archivo a la vez o hacer todos los archivos modificados a la vez o en cualquier punto intermedio.

La idea de hacer varios archivos como una confirmación es que, en términos generales, debería poder consultar el repositorio en cualquier versión en particular y al menos se compilará y, con suerte, se ejecutará. Esto es importante en los equipos. Ahora en la práctica esto puede no ser cierto el 100% del tiempo, pero el principio rector es sólido.

Entonces, ya sea que haga un archivo, todos sus cambios a la vez o algo entre lo que está registrando deberían tener sentido como un solo compromiso. Al igual que si corrige un error y necesita modificar 8 archivos, verifique todos esos 8 archivos como uno confirma con un mensaje que dice qué error solucionó y cómo lo solucionó. Será más fácil implementarlo más adelante si hay un problema con él.

El "atómico" en este caso se refiere a una operación atómica. Puede encontrar una buena definición de eso aquí: http://en.wikipedia.org/wiki/Atomic_operation

Todos los commits en SVN son automáticamente atómicos, por lo que lo obtienes de forma gratuita en todos los commits.

Si desea saber para qué sirven las confirmaciones atómicas, imagine que fusiona una rama en el tronco de su disco. Empiezas por la mañana y después de almorzar, todo se compila y todas las pruebas unitarias se ejecutan con éxito. Luego confirma los más de 200 archivos modificados durante esa fusión.

En SVN, la confirmación se realiza correctamente y todos los más de 200 archivos se confirman de una vez o la confirmación falla y no se realizaron cambios en el repositorio. (No hay mucho más que decir sobre esto. Es como siempre debería haber sido).

En CVS, que no tiene confirmaciones atómicas, puede suceder que su confirmación se interrumpa después de 150 archivos porque alguien tropezó con su cable de red, con los más de 50 archivos restantes no confirmados, dejando el repositorio en un estado intermedio . Mientras intenta conectar su cable de red, alguien más en su equipo registra otro conjunto de cambios. Ese conjunto de cambios es disjunto de los que ya registró, por lo que la confirmación de la otra persona tiene éxito. Sin embargo, los cambios son incompatibles. Ahora el equipo está atrapado con un repositorio que contiene código que ni siquiera se compila, y mucho menos pasa cualquier prueba. Lo que es peor: ustedes dos tienen un gerente de equipo que se los lleva por el cuello para arreglar esos cambios incompatibles lo más rápido posible para que el resto del equipo pueda dejar de jugar Quake y volver al trabajo.

Sorprendentemente, tales escenarios no son tan improbables como podría parecer. He estado allí varias veces y obtuve mi colección de pésimas camisas.

Para comprender el verdadero uso de la confirmación atómica, lea esto sobre la integración continua:

http://en.wikipedia.org/wiki/Continuous_integration

El uso se trata realmente de garantizar que pueda deshacer todos los cambios de un desarrollador específico en caso de problemas de integración. Esta es una característica muy poderosa para mantener la integridad del código en el repositorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top