Introducción a Git
Origen
Git fue creado por Linus Torvalds para mantener el código fuente del desarrollo del núcleo Linux, el proyecto de código abierto más importante del mundo.
Es un Sistema de Control de Versiones Distribuido (en inglés, Distributed Version Control System - DVCS) de código abierto que se adapta a todo tipo de proyectos desde pequeños hasta grandes y permite la creación y fusión de branches (ramas).
Por qué lo usamos
- Uso de branches. Las branches permiten trabajar con una base de código aislada y paralela a la base estable.
- Trabajo colaborativo distribuido. Distintos programadores, en distintos lugares, pueden trabajar sobre el mismo código fuente, al mismo tiempo.
- Permite regresar a versiones anteriores de forma sencilla y rápida.
- Permite generar flujos de trabajo que facilitan el desarrollo y mantenimiento de proyectos de gran tamaño.
- Reduce considerablemente los tiempos de deploy (despliegue) de un proyecto, al almacenar solamente los cambios.
- Implementa un sistema de etiquetas, para organizar las distintas versiones del proyecto.
- Se adapta a todo tipo de proyectos desde pequeños hasta grandes.
Desde su creación, los beneficios de Git han hecho que se convierta en el DVCS predominante en la industria de desarrollo de software.
Conceptos principales
Git es una herramienta que se maneja a través de la línea de comandos, más allá de que existan otras herramientas (independientes) con GUI para facilitar su uso. Por lo tanto, cada característica mencionada a continuación viene relacionada con un comando específico, que veremos luego.
Un proyecto usualmente se desarrolla dentro de un directorio que contiene el código fuente (archivos y otros directorios). Git se encarga de hacer un tracking (seguimiento) de cada archivo y directorio del proyecto, y mantiene un historial de sus cambios.
El conjunto de los archivos trackeados por Git se conoce como repositorio (o, informalmente, “repo”).
Cada vez que deseemos guardar cambios de uno o más archivos en el repositorio, Git tomará un snapshot (instantánea) del estado de los archivos y lo almacenará. Para cada snapshot, se guardan solo los archivos que sufrieron cambios, los que se mantuvieron sin cambios simplemente son referenciados.
Cada punto que se guarda permanentemente como un snapshot se conoce como commit (confirmación).
Siempre que trabajemos y guardemos cambios, lo estaremos haciendo dentro de una branch específica. Si no hemos creado una manualmente, se usará una branch inicial, creada por defecto, llamada main (principal) o master (si es que no modificamos el nombre asignado por defecto).
Se pueden crear todas las branches necesarias para el desarrollo ya que el costo de hacerlo es mínimo, tanto en tiempo, como en espacio de almacenamiento.
Una branch es un contexto o entorno aislado del repositorio, creado a partir de un commit de otra branch. Es decir, tiene el estado que tenía la otra branch hasta ese commit. Y nos permite continuar desarrollando de manera aislada desde ese punto en común. Posteriormente, podemos fusionar los cambios realizados en la branch con la branch original o con la branch principal.
Podemos movernos entre las distintas branches existentes de un repositorio, siempre y cuando hayamos guardado los cambios (sobre los archivos trackeados) que realizamos en la branch en la que estemos.
Al ser distribuido, cada integrante de un equipo de desarrollo puede tener una copia exacta del repositorio, a diferencia de los Sistemas de control de versiones centralizados. Esto hace que los desarrolladores no dependan de un servidor central para poder trabajar, pero sí se puede utilizar uno para sincronizar los avances de todos los integrantes del equipo.
El flujo de trabajo usando un repositorio remoto, es decir, un repositorio almacenado en una plataforma online (GitHub, Gitlab, etc.), se basa en el uso de branches, tanto para subir como para bajar cambios. Es decir, la sincronización se realiza entre estados guardados de branches. Y no se puede sincronizar un estado que no esté guardado permanentemente.
Instalación
Se puede descargar Git desde la página oficial: git-scm.com
Junto con Git se instalará también Git Bash, la herramienta de línea de comandos que vamos a utilizar. Git Bash es una versión para Windows de un emulador de terminal con el shell interactivo bash que se utiliza en muchas distribuciones de Linux.
El instalador nos va a dar varias opciones y, en su mayoría, lo recomendable es dejar los valores por defecto. Solo sería conveniente modificar dos de ellas.
Primero, elegir un editor de texto por defecto. Al usar Git desde la línea de comandos, hay situaciones en las que vamos a necesitar utilizar un editor de texto para escribir un mensaje para un commit. En estos casos Git Bash proporciona un editor de texto por defecto llamado Vim. Este es un editor de texto por línea de comandos, que se selecciona por defecto por razones históricas, pero no es una opción conveniente en la actualidad, ya que es complicado de usar.
Para esta configuración recomendamos cambiar el editor por defecto a alguno más moderno que tengamos instalado. Las opciones recomendadas son:
- nano: editor de texto por línea de comandos que se instala con Git Bash.
- Notepad (Bloc de notas): editor de texto con GUI que viene por defecto con Windows.
Por otro lado, es posible seleccionar un editor de texto independiente, como VS Code o Notepad++, pero este debe estar instalado en nuestro sistema previamente.
Segundo, modificar el nombre de la branch inicial. El nombre de la branch inicial (que nosotros llamamos main
anteriormente), está definido como master por defecto. Esto es porque una aplicación predecesora de Git (Bitkeeper) usaba ese nombre para la branch principal, y por costumbre, se usó ese nombre a partir de entonces.
Actualmente los equipos de trabajo cambian el nombre de su branch principal a main
u otros. Por lo tanto, Git nos permite modificar el nombre por defecto. En este caso, recomendamos usar el nombre main, ya que tiene más sentido y es el que usa la plataforma GitHub por defecto.
Una vez finalizada la instalación, podemos abrir Git Bash desde Inicio 🠚 Git 🠚 Git Bash.
Configuración inicial
Antes de comenzar a usar Git para administrar nuestros repositorios debemos configurar nuestro nombre e e-mail, ya que Git usa estos datos cada vez que se realiza un commit.
Una vez abierto Git Bash, tenemos que ejecutar los comandos, presionando Enter ↵
después de cada uno:
1git config --global user.name <nombre>2
3git config --global user.email <email>
Estos comandos no devolverán ninguna salida si se ejecutan sin errores.
Si el nombre de usuario contiene espacios en blanco, debemos encerrar todo el nombre con comillas.
Después de realizar esta configuración podemos cerrar la ventana de Git Bash. Para próximos usos lo abriremos de una manera más sencilla.