¬Ņcu√°l es el mejor sistema de control de versiones?

Git vs. SVN: ¬Ņcu√°l es el mejor sistema de control de versiones?

Los llamados sistemas de control de versiones fueron creados con el fin de detectar cambios en los documentos o archivos y se encargan de guardar todas las versiones anteriores, incluyendo el registro de fecha y hora, así como el identificador del usuario de un archivo para que los datos puedan ser recuperados y restaurados en cualquier momento. De esta forma, es posible determinar qué usuario ha realizado cambios en un punto determinado. Los objetivos generales de este tipo de sistemas consisten en coordinar el acceso compartido de varios usuarios a los archivos y permitir el desarrollo simultáneo de varias bifurcaciones o branches.

Generalmente, los sistemas de control de versiones se utilizan para el desarrollo de software, para aplicaciones de oficina y para gestores de contenido. Dos de los m√°s conocidos son Apache Subversion (SVN) y Git, los cuales pueden ser instalados internamente en el servidor propio o externamente en el servidor de alg√ļn proveedor de alojamiento web. El servicio de alojamiento basado en la web para proyectos Git es GitHub, mientras que en¬† RiouxSVN aloja a Subversion. Proveedores como SourceForge ofrecen alojamiento para ambos sistemas.

SVN: el sucesor CVS de CollabNet

A principios del a√Īo 2000, CollabNet empez√≥ a desarrollar el software libre Subversion y publicar√≠a, cuatro a√Īos m√°s tarde, su primera versi√≥n. Con ello, SVN se uni√≥ al modelo CVS (Concurrent Versions System). En 2009, el proyecto se traslad√≥ a la Apache Software Foundation, motivo por el cual es conocido actualmente como Apache Subversion.

SVN se basa en un sistema de control de versiones centralizado. Esto significa que existe un almacén central de datos (el repositorio) accesible a todos los usuarios. Dado que los cambios realizados no pueden ser fusionados entre sí, el sistema evita que dos usuarios puedan editar un mismo archivo al mismo tiempo. El proceso es muy simple, cuando uno de los usuarios accede a un archivo, el sistema lo marca automáticamente como de solo lectura para los demás. Además, Apache Subversion ofrece la posibilidad de descargar y editar directorios individuales sin depender del árbol general de directorios. De esta manera, es posible asignar diferentes permisos de lectura y escritura a los diferentes usuarios. Subversion se caracteriza también porque puede registrar directorios vacíos, renombrados y mudados de sitio sin pérdidas de su historia.

Git: el sustituto de los desarrolladores del kernel de Linux

Casi de manera involuntaria, en abril de 2005 el creador de Linux, Linus Torvalds, comenz√≥ con el desarrollo de un nuevo sistema de control de versiones. La raz√≥n: debido a un cambio en la licencia del sistema BitKeeper, los desarrolladores del n√ļcleo de Linux perdieron su privilegio de uso gratuito. El nuevo sistema deb√≠a proporcionar flujos de trabajo similares a los de Bitkeeper y ofrecer un alto nivel de eficiencia, as√≠ como seguridad frente a cambios accidentales o intencionales.

Git es un sistema de control de versiones distribuido, lo que significa que, aunque existe un repositorio central en el cual se incorporan los cambios, todos los usuarios pueden descargar su propia copia de trabajo. De esta forma, todos tienen acceso al repositorio completo, incluyendo el historial local, sin depender de ning√ļn tipo de conexi√≥n de red. Todos los cambios se transfieren r√°pidamente al repositorio central. Como consecuencia, Git no ofrece ning√ļn sistema de bloqueo, sino que cada usuario genera sus propios directorios o branches dentro del √°rbol para ser cargados posteriormente al repositorio central. Por defecto, cada usuario tiene permisos de lectura y escritura para los diferentes directorios (en caso de que se quiera asignar permisos especiales, ser√° necesario crear otros directorios ra√≠z). Cada copia de trabajo es una copia de seguridad independiente del directorio ra√≠z, lo que resulta ventajoso si este sufre alg√ļn da√Īo o fallo. Git solo registra los contenidos de los directorios, por eso los vac√≠os se eliminan autom√°ticamente.

SVN vs. Git: una comparación directa

Aunque muchos usuarios se preguntan cuál de los dos programas de control de versiones es mejor, no existe una respuesta general. La elección del sistema de control de versiones más adecuado para uno u otro proyecto dependerá de tus objetivos específicos. Ambos sistemas difieren en su estructura y en el proceso de trabajo resultante. La siguiente tabla resume sus principales diferencias:

SVN Git
Control de versiones Centralizada Distribuida
Repositorio Un repositorio central donde se generan copias de trabajo Copias locales del repositorio en las que se trabaja directamente
Autorización de acceso Dependiendo de la ruta de acceso Para la totalidad del directorio
Seguimiento de cambios Basado en archivos Basado en contenido
Historial de cambios Solo en el repositorio completo, las copias de trabajo incluyen √ļnicamente la versi√≥n m√°s reciente Tanto el repositorio como las copias de trabajo individuales incluyen el historial completo
Conectividad de red Con cada acceso Solo necesario para la sincronización

Estas son las principales ventajas de ambos sistemas:

Debes decantarte por Git cuando…

  • ‚Ķno quieres depender de una conexi√≥n de red permanente, pues quieres trabajar en tu proyecto desde cualquier lugar.
  • ‚Ķquieres seguridad en caso de fallo o p√©rdida de los repositorios principales.
  • ‚Ķno necesitas contar con permisos especiales de lectura y escritura para los diferentes directorios (aunque, de ser as√≠, ser√° posible y complejo implementarlo).
  • ‚Ķla transmisi√≥n r√°pida de los cambios es una de tus prioridades.

Subversion será la opción indicada, si…

  • ‚Ķnecesitas permisos de acceso basados en rutas de acceso para las diferentes √°reas de tu proyecto.
  • ‚Ķdeseas agrupar todo tu trabajo en un solo lugar.
  • ‚Ķtrabajas con numerosos archivos binarios de gran tama√Īo.
  • ‚Ķtambi√©n quieres guardar la estructura de los directorios vac√≠os (estos son rechazados por Git, debido a que no contienen ning√ļn tipo de contenido).

En caso de que las características enumeradas anteriormente no hayan sido decisivas para decantarse por alguno de los dos, siempre es recomendable realizar una prueba con cualquiera de los sistemas de control de versiones. En ambos casos encontrarás el apoyo de una gran comunidad, proveedores de alojamiento de gran calidad como GitHub y ofertas de soporte profesional.