Google

jueves, 28 de agosto de 2008

Conflicto de versiones

Es dificil para mi contar la cantidad de veces que he tenido que revertir los cambios en un codigo porque cometi un error o introduje un bug en el codigo. El control de versiones facilita muchisimo el trabajo cuando tengo se presenta esta situacion.

El control de versiones es la gestion de los cambios que se realizan sobre el codigo fuente escrito, facilitando la administracion de las distintas versiones de cada producto desarrollado, asi como las posibles especializaciones realizadas.

El control de versiones consta basicamente de un repositorio, el cual gestiona la informacion gestionada por el sistema. Este repositorio contiene el historial de las versiones de cada uno de los elementos gestionandos (cada archivo de codigo, imagenes, documentos, etc). Ademas cada desarrollador mantiene una copia local del repositorio, sobre la cual se hacen las modificaciones de los elementos. El desarrollador puede actualizar la ultima version del codigo o enviar los cambios que este haya realizado al repositorio.

Cuando se envia un cambio al repositorio, se crea un registro en el historial del mismo y se le asigna un numero de revision (el cual es incremental). El sistema de control de versiones automaticamente mezcla las diversas modificaciones para arrojar una ultima version.

Muchas veces cuando los grupos de trabajos son mas o menos grandes tienden a ocurrir "conflictos" en el codigo los cuales surgen porque el sistema de control de versiones no es capaz de fusionar los cambios enviados correctamente (por ejemplo dos desarrolladores modificaron la misma linea de codigo), por lo cual es importante tener tener unas convenciones sobre como y cuando enviar una nueva modificacion, de tal forma que se pueda reducir significativamente la aparicion de estos conflictos.

Lo ideal es hacer un check-in de los cambios cuando tenga una version del codigo estable. Una vez haya probado todos los cambios y este listo para ser enviado a un ambiente de produccion. Esto funciona bien cuando uno es el unico desarrollador o el grupo es bastante pequeno. Sin embargo cuando el equipo de desarrollo es grande lo mas adecuado es enviar una modificacion regularmente, eso si, el codigo debe ser probado antes para evitar el envio de codigo con errores. Y cada vez que se envia una modificacion se debe hacer una actualizacion del codigo, de tal manera de asegurarse de tener la misma version. De igual forma se debe comunicar al resto del equipo que se envio una nueva revision al repositorio de tal manera que el resto del equipo pueda tener en su copia local la ultima version de los codigos.

Esto no garantiza que los conflictos desaparezcan pero ayuda a que estos no aparezcan con tanta frecuencia. Particularmente en mi experiencia los conflictos aparecen bien porque no se envia los codigos regularmente (lo cual hace que mis cambios se envien tarde y otro desarrollador lo haya podido modificar) o bien porque no actualizo los codigos, con la consecuencia de que efectuo mis cambios sobre una version de codigo que no es la ultima.