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
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.
Excelente post!
ResponderEliminar