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.
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.
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.
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:
Estas son las principales ventajas de ambos sistemas:
Debes decantarte por Git cuando…
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 |
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.
- …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).