Los llamados sistemas de control de versiones fueron creados con el fin de detectar cambios en los do­cu­me­n­tos o archivos y se encargan de guardar todas las versiones an­te­rio­res, in­clu­ye­n­do el registro de fecha y hora, así como el ide­n­ti­fi­ca­dor del usuario de un archivo para que los datos puedan ser re­cu­pe­ra­dos y re­s­tau­ra­dos en cualquier momento. De esta forma, es posible de­te­r­mi­nar qué usuario ha realizado cambios en un punto de­te­r­mi­na­do. Los objetivos generales de este tipo de sistemas consisten en coordinar el acceso co­m­pa­r­ti­do de varios usuarios a los archivos y permitir el de­sa­rro­llo si­mu­l­tá­neo de varias bi­fu­r­ca­cio­nes o branches.  

Ge­ne­ra­l­me­n­te, los sistemas de control de versiones se utilizan para el de­sa­rro­llo de software, para apli­ca­cio­nes de oficina y para gestores de contenido. Dos de los más conocidos son Apache Su­b­ve­r­sion (SVN) y Git, los cuales pueden ser in­s­ta­la­dos in­te­r­na­me­n­te en el servidor propio o ex­te­r­na­me­n­te en el servidor de algún proveedor de alo­ja­mie­n­to web. El servicio de alo­ja­mie­n­to basado en la web para proyectos Git es GitHub, mientras que en  RiouxSVN aloja a Su­b­ve­r­sion. Pro­vee­do­res como Sou­r­ce­Fo­r­ge ofrecen alo­ja­mie­n­to para ambos sistemas.

SVN: el sucesor CVS de CollabNet

A pri­n­ci­pios del año 2000, CollabNet empezó a de­sa­rro­llar el software libre Su­b­ve­r­sion y pu­bli­ca­ría, cuatro años más tarde, su primera versión. Con ello, SVN se unió al modelo CVS (Co­n­cu­rre­nt Versions System). En 2009, el proyecto se trasladó a la Apache Software Fou­n­da­tion, motivo por el cual es conocido ac­tua­l­me­n­te como Apache Su­b­ve­r­sion.

SVN se basa en un sistema de control de versiones ce­n­tra­li­za­do. Esto significa que existe un almacén central de datos (el re­po­si­to­rio) accesible a todos los usuarios. Dado que los cambios rea­li­za­dos no pueden ser fu­sio­na­dos 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 au­to­má­ti­ca­me­n­te como de solo lectura para los demás. Además, Apache Su­b­ve­r­sion ofrece la po­si­bi­li­dad de descargar y editar di­re­c­to­rios in­di­vi­dua­les sin depender del árbol general de di­re­c­to­rios. De esta manera, es posible asignar di­fe­re­n­tes permisos de lectura y escritura a los di­fe­re­n­tes usuarios. Su­b­ve­r­sion se ca­ra­c­te­ri­za también porque puede registrar di­re­c­to­rios vacíos, re­no­m­bra­dos y mudados de sitio sin pérdidas de su historia.

Git: el sustituto de los de­sa­rro­lla­do­res del kernel de Linux

Casi de manera in­vo­lu­n­ta­ria, en abril de 2005 el creador de Linux, Linus Torvalds, comenzó con el de­sa­rro­llo de un nuevo sistema de control de versiones. La razón: debido a un cambio en la licencia del sistema BitKeeper, los de­sa­rro­lla­do­res del núcleo de Linux perdieron su pri­vi­le­gio de uso gratuito. El nuevo sistema debía pro­po­r­cio­nar flujos de trabajo similares a los de Bitkeeper y ofrecer un alto nivel de efi­cie­n­cia, así como seguridad frente a cambios ac­ci­de­n­ta­les o in­te­n­cio­na­les.

Git es un sistema de control de versiones di­s­tri­bui­do, lo que significa que, aunque existe un re­po­si­to­rio central en el cual se in­co­r­po­ran los cambios, todos los usuarios pueden descargar su propia copia de trabajo. De esta forma, todos tienen acceso al re­po­si­to­rio completo, in­clu­ye­n­do el historial local, sin depender de ningún tipo de conexión de red. Todos los cambios se tra­n­s­fie­ren rá­pi­da­me­n­te al re­po­si­to­rio central. Como co­n­se­cue­n­cia, Git no ofrece ningún sistema de bloqueo, sino que cada usuario genera sus propios di­re­c­to­rios o branches dentro del árbol para ser cargados po­s­te­rio­r­me­n­te al re­po­si­to­rio central. Por defecto, cada usuario tiene permisos de lectura y escritura para los di­fe­re­n­tes di­re­c­to­rios (en caso de que se quiera asignar permisos es­pe­cia­les, será necesario crear otros di­re­c­to­rios raíz). Cada copia de trabajo es una copia de seguridad in­de­pe­n­die­n­te del di­re­c­to­rio raíz, lo que resulta ventajoso si este sufre algún daño o fallo. Git solo registra los co­n­te­ni­dos de los di­re­c­to­rios, por eso los vacíos se eliminan au­to­má­ti­ca­me­n­te.  

SVN vs. Git: una co­m­pa­ra­ció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 es­pe­cí­fi­cos. Ambos sistemas difieren en su es­tru­c­tu­ra y en el proceso de trabajo re­su­l­ta­n­te. La siguiente tabla resume sus pri­n­ci­pa­les di­fe­re­n­cias:

SVNGit
Control de versionesCe­n­tra­li­za­daDi­s­tri­bui­da
Re­po­si­to­rioUn re­po­si­to­rio central donde se generan copias de trabajoCopias locales del re­po­si­to­rio en las que se trabaja di­re­c­ta­me­n­te
Au­to­ri­za­ción de accesoDe­pe­n­die­n­do de la ruta de accesoPara la totalidad del di­re­c­to­rio
Se­gui­mie­n­to de cambiosBasado en archivos Basado en contenido
Historial de cambiosSolo en el re­po­si­to­rio completo, las copias de trabajo incluyen úni­ca­me­n­te la versión más recienteTanto el re­po­si­to­rio como las copias de trabajo in­di­vi­dua­les incluyen el historial completo
Co­ne­c­ti­vi­dad de redCon cada accesoSolo necesario para la si­n­cro­ni­za­ción

Estas son las pri­n­ci­pa­les ventajas de ambos sistemas:

Debes de­ca­n­tar­te por Git cuando…

  • …no quieres depender de una conexión de red pe­r­ma­ne­n­te, pues quieres trabajar en tu proyecto desde cualquier lugar.
  • …quieres seguridad en caso de fallo o pérdida de los re­po­si­to­rios pri­n­ci­pa­les.
  • …no necesitas contar con permisos es­pe­cia­les de lectura y escritura para los di­fe­re­n­tes di­re­c­to­rios (aunque, de ser así, será posible y complejo im­ple­me­n­tar­lo).
  • …la tra­n­s­mi­sión rápida de los cambios es una de tus prio­ri­da­des.

 Su­b­ve­r­sion será la opción indicada, si…

  • …necesitas permisos de acceso basados en rutas de acceso para las di­fe­re­n­tes á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 es­tru­c­tu­ra de los di­re­c­to­rios vacíos (estos son re­cha­za­dos por Git, debido a que no contienen ningún tipo de contenido).

En caso de que las ca­ra­c­te­rí­s­ti­cas enu­me­ra­das an­te­rio­r­me­n­te no hayan sido decisivas para de­ca­n­tar­se por alguno de los dos, siempre es re­co­me­n­da­ble realizar una prueba con cua­l­quie­ra de los sistemas de control de versiones. En ambos casos en­co­n­tra­rás el apoyo de una gran comunidad, pro­vee­do­res de alo­ja­mie­n­to de gran calidad como GitHub y ofertas de soporte pro­fe­sio­nal.

Ir al menú principal