Los sistemas de control de versiones registran los cambios sobre un archivo o conjunto de archivos a lo largo del tiempo, para posibilitar recuperar una versión específica más tarde (por lo cual muchas personas ven a los sistemas de control de versiones como "máquinas del tiempo"). Comúnmente se utilizan para controlar las versiones de archivos de código fuente, aunque sirven para cualquier tipo de archivo en una computadora. Por ejemplo, un diseñador gráfico podría utilizar un sistema de control de versiones para guardar las diferentes versiones de una imagen. De esta forma podría revertir la misma a un estado previo, revertir el proyecto completo a un estado previo, comparar los cambios a los largo del tiempo, determinar quién modificó que archivo por última vez, etc.

Un sistema de control de versiones bien implementado es una necesidad para el éxito de cualquier proyecto, ya sea pequeño o grande.

Este artículo es indispensable para aquellos desarrolladores que aún no han comenzado su carrera profesional y no tienen experiencia, o no conocen, los sistemas de control de versiones Git y Subversion.

Existen diferentes tipos de sistemas de control de versiones: locales, centralizados y distribuidos. Los sistemas de control de versiones locales son simples herramientas que se encargan de crear backups o diferencias regularmente en una base de datos o repositorio local. Muchos desarrolladores incluso utilizan(mos) una precaria técnica que consiste en copiar regularmente todos los archivos a otro directorio, lo cual es muy propenso a errores por supuesto (más de una vez he sobrescrito un directorio de backup por error). Por supuesto, además, este sistema no permite el trabajo colaborativo entre desarrolladores.

Los sistemas de control de versiones centralizados, como Subversion, utilizan un servidor centralizado donde mantener el repositorio de archivos. Esto permite que diferentes desarrolladores, puedan trabajar sobre un mismo proyecto desde diferentes estaciones de trabajo remotas de forma colaborativa. Los desarrolladores (clientes) generan una copia local de los archivos en el repositorio, la cual mantienen actualizada, y desde la cual envían los cambios que han realizado de vuelta al repositorio. La gran ventaja de este esquema es que simplifica el trabajo en equipo, y permite conocer a cierto grado en qué está trabajando cada miembro del equipo. Sin embargo, los sistemas de control de versiones centralizados comparten una desventaja con los sistemas de control de versiones locales: representan un simple punto de fallo. Si ocurre un problema con el servidor, no se podrá realizar ningún control de versiones hasta que se recupere el servicio. Sin contar con que, si no existe una buena política de backups, es posible que se pierda absolutamente todo el contenido del repositorio.

En cambio, en los sistemas de control de versiones distribuidos o descentralizados (por ejemplo Git), los clientes poseen una copia completa del repositorio (clon). Si un servidor tiene problemas, se puede recuperar desde el repositorio de cualquier cliente.

Git

Git fue desarrollado inicialmente por Linus Torvalds para el desarrollo del kernel Linux. La principal diferencia entre Git y otros sistemas de control de versiones es la forma en la que Git trata a los datos. La mayoría de los sistemas manejan a la información que mantienen como un conjunto de archivos y los cambios sobre cada uno a lo largo del tiempo. En cambio, Git maneja a los datos como un conjunto de snapshots de un sistema de archivos. En cada commit básicamente se toma un snapshot del estado de todos los archivos en ese momento. Lógicamente, si un archivo no ha sido modificado, Git no almacena ese archivo nuevamente, sino que guarda un enlace al archivo en el snapshot previo.

Recursos

Los siguientes enlaces apuntan a recursos interesantes para quienes deseen comenzar a trabajar con Git:

git - la guía sencilla. Una guía muy rápida y sencilla para comenzar con git, sin complicaciones. Se trata de una guía muy sintética para salir del paso rápidamente con git. No entra en ningún detalle y sólo explica los conceptos básicos, pero está muy bien si necesitamos algo rápido.

Pro Git. Este libro es una guía completamente actualizada para utilizar Git de forma profesional. Escrito por Scott Chacon y Ben Straub, el libro se distribuye de manera gratuita. Todo su contenido es publicado bajo la licencia Creative Commons Attribution Non Commercial Share Alike 3.0. Es posible descargarlo de manera gratuita en formato PDF, epub, MOBI, HTML, y existe una versión impresa para comprar en Amazon.com.

Comandos más utilizados

¿Cuáles son los comandos más comunes cuando se utiliza Git?

ComandoPropósito
git initCrear un nuevo repositorio.
git clone /ruta/al/repositorioCrear una copia local de un repositorio.
git clone usuario@host:/ruta/al/repositorioCrear una copia local de un repositorio remoto.
git add <archivo>
git add .
Registrar cambios.
git commit -m "Mensaje"Realizar un commit de los cambios.
git push origin masterEnviar los cambios al repositorio remoto.
git remote add origin <servidor>Conectar repositorio local a un repositorio remoto.
git checkout -b testingCrear y cambiar a una nueva rama llamada "testing".
git checkout masterVolver a la rama principal.
git push origin testingSubir la rama al repositorio remoto (para que esté disponible al resto de los desarrolladores).
git branch -d testingBorrar la rama "testing".
git pullActualizar la copia local al commit más reciente.
git merge <rama>Fusionar una rama a la rama activa local.
git diff <rama_fuente> <rama_destino>Obtener las diferencias entre dos ramas.
git tag 1.0 <commit_id>Crear la etiqueta "1.0" asociada al commit <commit_id>.
git logMostrar el registro de commits.
git checkout -- <archivo>Restaurar <archivo> desde la versión del último commit local.
git fetch origin
git reset --hard origin/master
Descartar la copia local y commits y recuperar la última versión desde el repositorio en el servidor.

Subversion

Subversion es un sistema de control de versiones libre y open source que puede operar entre redes, lo que permite ser utilizado por diferentes personas en diferentes computadoras. Esta capacidad de que varias personas puedan modificar y gestionar el mismo conjunto de datos desde sus respectivas locaciones fomenta la colaboración. Subversion es un sistema de control de versiones centralizado, de propósito general, que puede ser utilizado para gestionar cualquier colección de archivos.

Recursos

Los siguientes enlaces apuntan a diferentes recursos para quienes deseen comenzar a trabajar, o implementar un repositorio, utilizando Subversion:

Apache Subversion: Quick Start. Una guía rápida que contiene los comandos necesarios para inicializar un repositorio y crear una copia de trabajo.

Apache Subversion Documentation. Documentación oficial de Apache Subversion. Contiene punteros a diferentes fuentes de documentación que apunta a usuarios y desarrolladores de Subversion y herramientas de terceros que se integran con Subversion. Esta documentación tiene una licencia libre.

Version Control with Subversion. El libro gratuito escrito por algunos desarrolladores de Subversion. Publicado por O'Reilly Media. Es posible adquirir una copia impresa o descargar de forma gratuita la versión más reciente en formato HTML y PDF.

Comandos más utilizados

¿Cuáles son los comandos más comunes cuando se utiliza Subversion?

ComandoPropósito
cd /var/svn
svnadmin create repo
Crear un nuevo repositorio, llamado "repo", dentro del directorio "/var/svn/".
svn mkdir -m "Estructura de directorios" file:///var/svn/repo/trunk file:///var/svn/repo/branches file:///var/svn/repo/tagsImportar el repositorio "repo".
mkdir ~/repo_copia
cd ~/repo_copia
svn checkout file:///var/svn/repo/trunk ./
Crear una copia de trabajo del directorio "repo" en "$HOME/repo_copia".
svn add --force ./Poner los archivos de la copia local bajo control de versiones.
svn commit -m "Mensaje"Enviar los cambios locales al repositorio.
svn upTraer los cambios desde el repositorio a la copia de trabajo.
svn help
svn help <subcomando>
Obtener ayuda.


Tal vez pueda interesarte


Compartí este artículo