Todo aquel que se haya tenido que enfrentar a un desarrollo en el que participan varios programadores se habrá encontrado con el mismo problema: ¿quién tiene la versión buena?
Y esto deriva en varios problemas más: ¿dónde aplico el cambio? ¿hás modificado tal fichero? ¿has terminado esa parte? y, sobre todo, que ocurre cuando alguien comete un error y tardamos días en darnos cuenta, ¿cómo volvemos atrás?
La solución en estos casos es un contol de versiones, basicamente lo que permite es tener una copia actualizada del trabajo sobre un servidor (repositorio) y una copia guardada de cada cambio subido al repositorio (versiones). Cada vez que alguien quiera continuar el trabajo debe bajarse una copia del repositorio actualizada, trabajar sobre ella y luego subir los cambios al servidor, creando una nueva versión.
Aunque son bastante evidentes, estas son algunas de las ventajas de trabajar con un control de versiones:
- Tener un control exacto sobre cual es la última versión del código, y quién y cuando la ha cargado.
- Poder comparar versiones, viendo cuales han sido los cambios realizados.
- Regresar atrás (a una vesión anterior) cuando lo que hemos desarrollado no nos ha dado los resultados esperados.
- Crear distintas ramas del proyecto. Si llegado a un punto se hace necesario hacer dos aplicaciones con distintas funcionalidades, pero con cosas en común, se pueden separar en dos ramas.
Obviamente hay más ventajas del control de versiones, pero creo que sólo por las cuatro anteriores merece la pena usar cualquier sistema gestor de control de versiones.
Entre los sistemas de control de versiones destacaría los tres siguientes:
- CSV (Concurrent Version System): Desarrollado por GNU se distribuye bajo licencia GPL. Fue muy popular hasta la aparición de Subversion.
- SVN (Subversion): Hoy es el más popular, fue creado para mejorar CVS, mejorando sobre todo el manejo de archivos binarios.
- Git: Diseñado por Linus Torvalds, es usado por el desarrollo del kernel de Linux, aunque no alcanza la popularidad de los otros dos.
- Mercurial: Un gestor de vesiones para entornos distribuidos sin necesidad de usar un servidor.
- Monotone: Al igual que Mercurial no usa servidor, cada cliente hace al mismo tiempo de cliente y servidor.
Más información: Wikipedia [Control de Versiones]