Introducción a Git (parte I)

Los VCS’s (Sistemas de Control de Versiones por sus siglas en inglés) existen desde los años 80. La primera versión de CVS, uno de los primeros en existencia, fue liberada en 1986. Con todo, no eran de uso general, en gran medida debido a sus limitaciones. CVS, por poner un ejemplo, no permitía renombrar archivos en el repositorio; era necesario borrarlo del repositorio, y volver a subirlo con el nuevo nombre. Ni pensar en hacer un renombrado masivo.

Interfaz de texto para Git

Fast forward a 2005, año en que el equipo de desarrollo del kernel de Linux decidió dejar de usar el VCS que estaban usando hasta entonces. Linus Torvald quería usar un VCS que pudiera aplicar parches al código base de Linux en menos de 30 segundos (Aproximadamente quince millones de líneas de código). Al no encontrar ningún VCS que cumpliera sus expectativas, decidió dar inicio al desarrollo de uno propio a su medida. El desarrollo comenzó en abril de 2005; la versión 1.0 fue liberada el 21 de diciembre de ese mismo año y es pertinente decir que cumplió con los objetivos de Torvald. A este respecto, resulta interesante ver la entrevista que le hace Chris Anderson en relación al desarrollo de Linux y de git; no tiene desperdicio.

Torvald comenzó el desarrollo de git con tres metas en mente:

  • Tomar CVS como ejemplo de lo que no se debía hacer.
  • Tener un flujo de trabajo distribuido (en contraste con el centralizado de SVN y CVS)
  • Incluir salvaguardas contra la corrupción y el borrado tanto accidental como malicioso.

Podemos decir que la meta fue alcanzada, git ha resultado ser un VCS bastante robusto, con soporte para desarrollo no lineal (más adelante veremos que significa eso), distribuido, perfectamente integrable con los protocolos de comunicación actual (es posible incluso aplicar parches al codebase desde el correo), maneja sin dificultad proyectos grandes (con el desarrollo de videojuegos hay una desventaja, que veremos más adelante) y que permite el firmado criptográfico de commits y releases.

Por todo ello, en poco tiempo, git se ha convertido en el estándar de facto en la industria. Aunque existen muchos otros VCS’s en el mercado, se espera que el desarrollador conozca por lo menos git. Hay todo un ecosistema alrededor de git (github, bitbucket, redmine, gitkraken, etc). Y con todo, no son pocos los desarrolladores que confiesan no entender bien su funcionamiento, y más bien establecen un flujo de trabajo vudú (es decir, se teclean los comandos como si fueran encantamientos mágicos, sin entender su funcionamiento y solo esperando resultados), huelga decir que tal enfoque es subóptimo. Por ello, en las siguientes entregas trataremos de romper el misticismo de git y comprender mejor su funcionamiento.