Sistemas de control de versiones (VCS)

Sistemas de control de Versiones

No es posible llevar a buen puerto ningún proyecto sin
la utilización de un sistema de control de versiones.
Es mi opinión que todo desarrollador debe
tener amplios conocimientos de al menos dos sistemas
de control de versiones: funcionamiento, características
y comandos más usados. No digo que todos deban ser expertos
pero sí conocer el funcionamiento básico de estos, cosas como:
  • checkout
  • commit
  • merge
  • update
Ahora mismo estamos en proceso de definir una nueva arquitectura
para nuestro SCV y al ahondar en el estudio de los mismos, nos damos
cuenta de la gran cantidad de opciones y sistemas que existen.


Existen ciertas características que diferencian a estos sistemas y que es
conveniente explicar:


Atomic Commits

Una de las características más importantes (y principal razón para
eliminar CVS de todo sistema). Significa que al realizar un commit
cada fichero es tratado de forma individual, por lo que si el proceso
es interrumpido en cualquier momento, nuestro código no quedará en un
estado inconsistente.

  • CVS: no
  • Subversion: sí
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Renombrar o mover ficheros o directorios

Al mover o renombrar un fichero o directorio se
mantiene su historial de cambios.

  • CVS: no
  • Subversion: sí
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Merge inteligente

El sistema es capaz de realizar un merge inteligente de los cambios que sufre
un fichero incluso después de que este haya sido renombrado.

  • CVS: no
  • Subversion: no
  • Git: no
  • Bazaar: sí
  • Mercurial: sí

Copia de ficheros

Al copiar un fichero, se mantiene la historia en ambas copias.

  • CVS: no
  • Subversion: sí
  • Git: no
  • Bazaar: no
  • Mercurial: sí

Clonado del repositorio

Podemos clonar el repositorio a una copia local manteniendo
la misma funcionalidad sin necesidad de permisos especiales
en el servidor central.

  • CVS: no (CVSup)
  • Subversion: no (SVN::Mirror)
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Propagación de cambios

Los cambios entre repositorios son posibles.

  • CVS: no
  • Subversion: sí
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Permisos del repositorio

Se permiten definir permisos de acceso a distintas partes del repositorio.

  • CVS: limitado
  • Subversion: sí
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Conjuntos de cambios

Podemos crear conjuntos de cambios que son relevantes entre sí en un
único paquete atómico que puede ser cancelado o propagado como sea
necesario.

  • CVS: no
  • Subversion: implicitos
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Historial de ficheros linea a linea (annotate, blame)

Deseamos revisar los cambios realizados sobre cada línea de un fichero
y quien lo ha realizado

  • CVS: sí
  • Subversion: sí
  • Git: sí
  • Bazaar: sí
  • Mercurial: sí

Trabajo en un directorio

El sistema permite realizar checkouts y restringir commits
de un único directorio.

  • CVS: sí
  • Subversion: sí
  • Git: no
  • Bazaar: no y sí
  • Mercurial: más o menos

Mensajes de commit por fichero

Se pueden asignar distintos mensajes de commit a cada fichero o conjunto.

  • CVS: no
  • Subversion: no
  • Git: no
  • Bazaar: no (bzr-gtk sí)
  • Mercurial: no

Integración con Eclipse

  • CVS: sí
  • Subversion: sí
  • Git: sí
  • Bazaar: en desarrollo
  • Mercurial: sí

Estado de desarrollo

  • CVS: en mantenimiento. Nada nuevo
  • Subversion: desarrollo activo
  • Git: desarrollo activo
  • Bazaar: desarrollo activo
  • Mercurial: desarrollo activo

Quienes usan cada uno

CVS

SourceForge, GNU Emacs, SQLite, FreeBSD.

Subversion

SourceForge, Google Code, Apache, KDE, GNOME, gcc, Python, Ruby, Samba,
MPlayer, Mono, Django, Zope, vim y un largo etc.


Git

GitHub, Linux kernel, VLC, Perl, RoR, Android, Wine, Xorg, Fedora, etc.


Bazaar

Launchpad (Ubuntu y todos los proyectos en Launchpad), Apt,
Squid, Mailman, MySQL, Monocaffe Connections Manager.


Mercurial

BitBucket, Google Code, OpenJDK, MoinMoin, Aptitude, Xine, Xen, Mozilla, OpenSolaris, etc.


Claro que existen muchos otros VCS que los mostrados aquí, pero estos
son los más populares, los mejor documentados y son software libre.