Conceptos clave

Git

Git es un sistema de control de versiones que los desarrolladores usan para seguir y gestionar cambios en proyectos de software.

Imagina que estás escribiendo una historia y, con el tiempo, haces varios cambios: eliminas algunas partes, añades otras o reescribes capítulos enteros. Si luego quieres recordar o restaurar una versión anterior de tu historia, necesitarías un registro detallado de todos los cambios.

Eso es, básicamente, lo que Git hace en el desarrollo de software: conserva un historial completo de cada modificación hecha en el código.

El núcleo de Git es el repositorio. Piensa en él como el directorio de un proyecto: contiene la versión actual de todos sus archivos y también un registro extenso de cada cambio desde que se inicializó. Cuando los desarrolladores modifican el código, Git guarda los cambios en el historial. Así pueden volver a versiones anteriores si hace falta, comparar versiones distintas y colaborar en el mismo proyecto.

Git permite gestionar los cambios del código a lo largo del tiempo, sobre todo cuando varios desarrolladores trabajan en el mismo proyecto. Sin un sistema de control de versiones, sería difícil saber quién cambió qué y cuándo, lo que provocaría conflictos y trabajo perdido. Git evita estos problemas con un historial claro y ramas separadas en las que trabajar.

Git fue desarrollado en 2005 por Linus Torvalds, el ingeniero de software nacido en Finlandia más conocido por crear el kernel de Linux. Desde entonces se ha convertido en una herramienta esencial en el desarrollo de software moderno, especialmente en la comunidad open source. Plataformas como GitHub, GitLab y Bitbucket han construido ecosistemas enteros alrededor de Git, con herramientas para colaboración, integración continua y despliegue.

Interfaces de Git

Entrada principal: CLI de Git vs. GUI

Aunque Git es principalmente una herramienta de línea de comandos, también hay muchas interfaces gráficas que ofrecen una forma más cómoda de interactuar con él. Estas herramientas pueden ser especialmente útiles si Git todavía te suena nuevo o si prefieres una interfaz visual. Muchos IDE populares, como VS Code e IntelliJ IDEA, incluyen integración con Git, lo que facilita usarlo dentro del entorno de desarrollo.

Git en Terminal de macOS
Git en Terminal de macOS
Git en la interfaz de usuario de VS Code
Git en la interfaz de usuario de VS Code

Control de versiones en software convencional frente a Git

Muchas herramientas que no son para programar, como Google Docs, Microsoft Word o Dropbox, tienen algún tipo de historial de versiones. Pero no funcionan como Git. Los sistemas tradicionales de control de versiones registran los cambios de cada archivo de forma independiente respecto a los cambios en otros archivos.

Por ejemplo, imagina que has escrito un libro en Google Docs, donde cada capítulo es un documento separado. El libro está casi terminado y en unos días tienes que mandárselo a la editorial.

Por la noche, después de pasarte con el vino, decides meter una nueva línea argumental a toda prisa. Cambias varios capítulos, añades unos cuantos párrafos aquí y allá. Llega la mañana y te das cuenta de que la idea era un desastre total, así que quieres deshacerla.

Por suerte, Google Docs tiene historial de documentos, que te permite volver a una versión anterior del documento. Pero tienes que ir a todos y cada uno de los documentos modificados y revertir sus cambios. Si por accidente se te escapa uno de los archivos... (bah, eso no pasará jamás).

Aunque todos esos cambios formaban parte de una gran actualización, están completamente separados en el historial de cada documento.

Git registra cambios en todo el proyecto y te permite crear "instantáneas" del estado completo del proyecto en un momento concreto. Si tuvieras ese proyecto de libro en Git, podrías crear un commit que capturase todos los cambios de todos los capítulos a la vez. Si más adelante decides revertir los cambios de ese commit, Git podría hacerlo de una sola vez y restaurar todo el proyecto a su estado anterior. Esto facilita mucho gestionar cambios complejos que afectan a varios archivos y garantiza que el historial del proyecto siga siendo coherente.