Subversion vs Git ¿Qué sistema de versionado utilizar?

Si te dedicas a programar aplicaciones o desarrollar páginas web en un entorno colaborativo, seguramente te habrás preguntado:

  • ¿Cómo planificar el trabajo?
  • ¿Cómo realizar un control de las versiones?
  • ¿Cómo sincronizar el trabajo?
  • ¿Cómo facilitar la colaboración entre los distintos miembros que participan en el proyecto?

contratar un buen hosting

Para realizar ese tipo de tareas o cualquier otra que requiera trabajar en un entorno colaborativo necesitarás un CVS, también conocido como Concurrent Versioning System.

Según la definición de Wikipedia, un CVS es «una aplicación informática que implementa un sistema de control de versiones: mantiene el registro de todo el trabajo y los cambios en los ficheros (código fuente principalmente) que forman un proyecto (de programa) y permite que distintos desarrolladores (potencialmente situados a gran distancia) colaboren.»

Los CVS mas conocidos y utilizados son Subversion y Git. En el artículo de hoy comparamos estos dos sistemas para que te sea más fácil escoger entre ambos, eligiendo el que mejor se adapta a tus necesidades.

 Subversion vs Git | Sistema Centralizado vs Sistema Distribuido

Antes de conocer a cada una de las aplicaciones queremos dejar clara la principal diferencia entre los dos sistemas CVS, y es que mientras Subversion (SVN) es un sistema centralizado, Git es distribuido.

Aunque luego explicaremos a que afecta este hecho a ambos sistemas así como sus características, en la imagen de abajo puedes observa dos gráficas una referente a un sistema centralizado como es el que tiene Subversion y otro un sistema distribuido como es el que tiene Git.

CVS Subversion vs Git

Subversion (SVN)

Subversion es un software libre que permite el control de versiones, permite el acceso al repositorio a través de redes ofreciendo la posibilidad de trabajar desde diferentes equipos, consiguiendo de esta manera la colaboración entre distintos miembros del proyecto.

El lanzamiento oficial fue en el 2000, pero su última actualización fue hace apenas unos meses, su uso es bajo licencia Apache y es multilengüe (disponible en Español). El funcionamiento de subversion se podría asimilar al de un gestor de ficheros de tipo repositorio.

Sistema Centralizado

Subversion se basa en un sistema centralizado, la principal ventaja de un sistema centralizado es su simplicidad, pero por el contrario no nos permite tener más de un repositorio central sobre el que trabajar, no podemos realizar confirmaciones (commit) si no estamos conectados al repositorio central y si estamos trabajando en un equipo de trabajo con muchos usuarios, la colaboración se complica.

Git

Git vio la luz en 2005 y su última versión actualizada fue apenas unos meses. Desde su lanzamiento se ha convertido en un sistema de control de versiones con una funcionalidad plena (aunque su objetivo no era exactamente ese).

Se basa en un sistema distribuido, siendo perfecto para el trabajo colaborativo dada su enorme flexibilidad, ya que cada usuario dispone de edición a su propio repositorio y tiene capacidad de lectura de los repositorios de los otros usuarios.

Git identifica las acciones mediante una suma de comprobación (checksum) que impide cambiar los contenidos de cualquier archivo o directorio sin que se entere. No puedes perder información durante su transmisión o sufrir corrupción de archivos sin que Git lo detecte.

Como Git sólo añade información a su base de datos interna cuando realizas una acción o confirmas cambios, es difícil que el sistema haga algo que pueda ser deshecho o borre información. Esto hace que podamos experimentar sin el riesgo de estropear nuestro sistema de control de versiones.

Sistema Distribuido

En el caso de un sistema distribuido es posible trabajar sin conexión al repositorio central (trabajo offline), se facilita la colaboración, podemos tener tantos repositorios externos como queramos, la mayoría de las operaciones son locales por lo que el tiempo de ejecución de las mismas se reduce considerablemente y su instalación y configuración es muy sencilla en nuestro espacio de hosting.

Sus principales desventajas son que su curva de aprendizaje es alta y los flujos de trabajo (workflow) entre colaboradores pueden ser algo más complejos.

Diferencias entre Subversion y Git

Planteamos un ejemplo para que se entienda mejor la diferencia entre ambos sistemas y nuestra comparativa Subversion vs Git. Imaginémonos que somos un desarrollador que está fuera de la oficina y no tenemos conexión a Internet:

  • Con Subversion, no podremos conectarnos al repositorio central y, por lo tanto no podremos realizar confirmaciones (commit) ni tener un control local de versiones del código fuente.
  • Con Git, nuestra copia local es un repositorio y podemos hacer confirmaciones (commit) sobre éste y tener todas las ventajas del control de código fuente. Cuando volvamos a tener conexión con el repositorio central, podremos realizar confirmaciones sobre él.
  • Mientras que SVN tiene la ventaja de que es más sencillo de aprender, Git se adapta mejor para desarrolladores que no están conectados continuamente al repositorio central.
  • Además, Git es más rápido en ejecución que SVN y características avanzadas, como la creación de ramas de trabajo (branching) y la combinación de ramas (merging) están mejor definidas.

Esto explica que en proyectos Open Source se utiliza principalmente Git. Creamos una rama del proyecto principal, hacemos nuestros cambios sobre esa rama sin afectar a la versión en producción y generamos una petición al responsable del proyecto para que revise las modificaciones y las integre en producción.

Resumen: Subversion vs Git

contratar un buen hosting

Git no es mejor que SVN, sólo trabajan de forma diferente. Si necesitamos un control de código fuente offline y tenemos la disposición de gastar más tiempo en aprender un sistema de control de versiones, Git es nuestra elección.

Si tenemos un sistema de control de código fuente estrictamente centralizado y estamos iniciándonos en el control de versiones, la simplicidad de SVN nos facilitará nuestro flujo de trabajo.

Comparte este artículo:

Comentarios (2)

Diego Melús

Diego Melús

Hola Daniel,

Muchísimas gracias por tu comentario y aportación al artículo.

Daniel Sanjurjo

Daniel Sanjurjo

Solo un detalle. La ventaja de hacer commit off-line con GIT creo que realmente no es tal. El objetivo final de un commit es hacer disponible tu código a los demás usuarios, y eso con GIT, SVN o el sistema que sea, no lo vas a poder hacer hasta que tengas conexión. Otra cosa es que hacer tus commit off-line te permita tener un control de versiones propio, para poder hacer y deshacer a nivel local hasta que te conectes para hacer disponible todo el resultado. Pero esta forma de trabajar, con una copia completa del repositorio en cada equipo de trabajo tiene la desventaja del espacio que puede ocupar, especialmente si hay muchos binarios.Yo llevo una copia de trabajo en un pincho que puedo sincronizar por red. Cuando estoy en cualquier ordenador puedo trabajar sobre mi copia, y cuando vuelvo a estar en un ordenador con SVN instalado (si no he instalado una copia ligera en el ordenador en el que he trabajado), simplemente hago commit y subo los cambios. Esa forma de trabajar me vino muy bien por ejemplo con el proyecto fin de carrera, en el que había muchos binarios (fotos, bases de datos personales para trabajar con volúmenes de datos, planos, etc), combinándolo con versiones portátiles del software de trabajo en el mismo pincho, una raspberry con un USB-HD en casa y un DNS dinámico.

Envíanos tu comentario: