Tutorial de Git, el VCS más usado actualmente


Vas a aprender el funcionamiento básico de Git, como crear tu primer repositorio y conectarlo a GitHub, además de su integración con Visual Studio Code.
Programación 24/8/2024 12 m
Tutorial de Git, el VCS más usado actualmente

Objetivo

El objetivo de este manual es enseñar a utilizar Git, el sistema de control de versiones más utilizado actualmente.

Git es una herramienta esencial para el desarrollo de software que facilita el trabajo en equipo y la gestión de versiones de código fuente. Permite a los desarrolladores colaborar en proyectos de cualquier tamaño con eficiencia, manteniendo un historial completo y detallado de todas las modificaciones realizadas en el código.

Con Git, los desarrolladores pueden trabajar de manera concurrente en diferentes ramas de desarrollo, lo que les permite experimentar con nuevas características o arreglar errores sin afectar el flujo de trabajo principal del proyecto. Cada rama puede ser fusionada con la línea principal de desarrollo una vez que el trabajo en ella está completo y se ha probado adecuadamente.

Una de las características clave de Git es su modelo de almacenamiento distribuido. A diferencia de los sistemas de control de versiones centralizados, cada copia de trabajo de un repositorio Git es un repositorio completo con todo el historial de cambios. Esto significa que los desarrolladores pueden trabajar de forma local y offline, realizando commits, consultando el historial de cambios y realizando otras operaciones sin necesidad de una conexión de red. La sincronización con otros repositorios, como un repositorio remoto en GitHub o Bitbucket, el cual veremos más tarde, se puede hacer en cualquier momento cuando se disponga de conexión a Internet.

Git también ofrece potentes herramientas para el manejo de cambios y la resolución de conflictos, permitiendo a los usuarios comparar versiones, revertir cambios y fusionar divergencias de manera eficiente. Su sistema de seguimiento de cambios es preciso y flexible, permitiendo a los desarrolladores seleccionar específicamente qué cambios incluir en sus commits.

Este manual tiene como objetivo proporcionar una comprensión básica de Git, cubriendo su instalación, configuración inicial, y las operaciones más comunes utilizadas en el día a día del desarrollo de software.

Instalación de GIT

Linux

Para instalarlo en Linux, simplemente debemos abrir el terminal de nuestra preferencia, y escribir el siguiente comando:

apt install git -y

Una vez ejecutado, podemos comprobar que está instalado con el comando:

git -v

Windows

Para instalarlo en Windows, simplemente iremos al apartado de descargar de la página oficial de Git (https://git-scm.com/download/win).

Seleccionando la opción de descarga de 64-bit para Windows en la web oficial

Una vez descarguemos el instalador de preferencia (Standalone 64-bit es el más común, por eso está indicado en la imagen), simplemente debemos abrirlo con doble click, y veremos esto:

Click en install siguiendo los pasos de instalación

Aquí solamente debemos darle a instalar, y procederemos con el proceso de configuración del instalador. Como no vamos a configurar nada específico, solamente daremos siguiente hasta que termine el proceso.

Panel en el que se muestra que ha finalizado la instalación

Una vez hayamos llegado aquí, solamente le daremos a “Finish”, y ya tendremos disponible Git tanto de manera gráfica, como en la línea de comandos. Para este manual, utilizaremos la versión de línea de comandos.

Configuración inicial

Antes que nada, Git trabaja con un sistema llamado “branches” o “ramas”. Este sistema lo que nos permite es tener diferentes bifurcaciones de nuestro código, que posteriormente podremos combinar al flujo de trabajo principal.

Por ejemplo, podríamos tener nuestra rama “main”, en la que iría el código fuente principal, el funcional y ultimo que hay. También, podríamos tener nuestra rama “dev” en la que estaríamos trabajando para ir realizando cambios ahí, y una vez queramos que esos cambios se incorporen a la fase de producción, los incorporaríamos en “main”.

Por defecto, Git llama a nuestra rama principal “master”, pero vamos a cambiar el nombre a “main”, ya que es con la que GitHub nombra por defecto a su rama principal, así luego nos ahorramos trabajo.

Para hacer esto, ejecutamos el siguiente comando:

git config --global init.defaultBranch main

Una vez configurado el nombre de la rama principal, vamos a configurar tanto nombre de usuario como correo del usuario. Configurar esto hará que podamos ver después quien ha hecho cada cambio en la rama. Para configurar esto, usaremos los dos siguientes comandos, cambiando nuestros datos:

git config --global user.name "miuser"
git config --global user.mail "miuser@mail.com"

Una vez configurados, podemos comprobar que se han configurado correctamente ejecutando el siguiente comando:

Comando que muestra la configuración de Git actual

Ahí vemos las 3 configuraciones que acabamos de hacer. Si no realizamos por lo menos la del user.email y user.name no podremos usar Git.

Inicialización del repositorio

El repositorio será ese contendor o carpeta que será la raíz de nuestro proyecto en Git.

Para inicializar un repositorio simplemente debemos crear una carpeta, o en una que ya tengamos, y accedemos a ella.

mkdir manual-git
cd manual-git

Una vez dentro, ejecutaremos el comando “git init”, y si vemos el contenido de la carpeta, veremos que se ha creado una carpeta llamada “.git”

Muestra de las carpetas al inicializar el repositorio

Dentro de esa carpeta “.git”, encontraremos todos los datos del repositorio. Principalmente, no debemos tocar lo que haya dentro, ya que de todos los ficheros los controla Git, aunque en un uso más avanzado, puedes usar hooks, pero eso no se cubre en este manual.

Creación de cuenta en GitHub

Ahora, vamos a crear nuestra cuenta de Github para tener un repositorio remoto. Esto lo que nos permite es tener nuestro repositorio local sincronizado en la nube. Para esto se suele utilizar dos herramientas muy populares: GitHub y GitLab. Ambas plataformas ofrecen servicios de hosting para repositorios Git.

Para este manual, usaremos GitHub.

Lo primero que haremos, será crearnos una cuenta en GitHub desde su página web (https://github.com/signup).

Una vez hayamos creado nuestra cuenta, esta será la página de inicio:

Página de inicio de GitHub

A la izquierda nuestros Top Repositories, en medio una feed de cambios en repositorios de gente a la que sigamos, y a la derecha cambios y recomendaciones.

También podemos ver en la barra de navegación un menú desplegable arriba a la izquierda, y arriba a la derecha nuestro perfil.

Configuración de acceso desde maquina local en GitHub

Antes de conectar nuestro repositorio remoto, necesitamos algún método de “iniciar sesión” en nuestra cuenta, básicamente una manera de poder subir ficheros a nuestro repositorio, ya que, si no nos tuviéramos que autenticar, podríamos modificar el repositorio de cualquier persona.

Para esto iremos al icono de nuestro perfil e iremos a la configuración

Localización de los ajustes en el desplegable de GitHub

Una vez dentro de la configuración, iremos a la pestaña “SSH and GPG keys” en el menú lateral izquierdo

Seleccionando la opción SSH and GPG Keys dentro de ajustes

Una vez dentro, debemos darle al botón verde que dice “New SSH Key”, que ahora generaremos.

Click al botón que dice New SSH Key

Ahora, en este menú, podremos ponerle un nombre a nuestra clave, y abajo pegaremos la clave que ahora generaremos.

Menú para añadir la clave

Vale, una vez aquí, nos quedamos en esta pestaña y vamos a nuestro terminal, ya que tenemos que generar en nuestro equipo un par de claves.

Para esto usaremos el siguiente comando para generar ese par de claves:

ssh-keygen -t rsa -b 4096

Una vez ejecutado el comando, encontraremos ese par de claves en la carpeta de inicio del usuario. Se habrán generado dos claves, la pública (que termina en .pub) y la privada (que no termina en nada).

Pues vamos a leer nuestra clave publica con el comando cat github.pub y ese texto que tiene dentro lo copiamos en el cuadrado que dejamos previamente abierto, y le ponemos un nombre a la clave, como puede ser “PC” o el que queramos.

Añadiendo al menú de GitHub la clave pública

Una vez rellenos los campos, clickamos en “Add SSH key” y veremos que se ha añadido a nuestra lista.

Ya con la clave añadida, tenemos que indicarle a SSH que use esa clave para loguear en Github. Para esto, solamente debemos mover tanto la clave privada como la publica a la carpeta “.ssh” con los siguientes comandos, además de entrar a la carpeta:

mv github .ssh/
mv github.pub .ssh/
cd .ssh/

Aquí es donde se guardan todas las claves de SSH. Para indicarle a SSH cual usar, simplemente debemos crear un fichero llamado “config” e introducir la siguiente información:

Host github.com
  IdentityFile github

Ya con esto, tenemos acceso desde nuestra máquina hacia nuestro repositorio de GitHub.

Creación y conexión de un repositorio remoto

Una vez tenemos nuestra cuenta, crearemos un repositorio en nuestra cuenta de GitHub. Para esto, daremos click en el botón “New” que vemos en ambas imágenes.

Click en el botón new en tu página de GitHub

Una vez le demos click, veremos los datos a rellenar para crear el repositorio.

Indicación de cada campo en el formulario de GitHub para crear un repositorio

  • Nombre del repositorio: En este campo rellenamos con el nombre de nuestro repositorio, en este caso “manual-git”.
  • Descripcion: Un breve resumen de nuestro repositorio.
  • Privacidad: Si queremos que el repositorio se vea en nuestro perfil de Github.
  • Readme: Si marcamos esta opción, se creará un Readme en el repositorio. Este fichero es especial en GitHub, ya que al entrar en la web que genera el repositorio, veremos en grande lo que escribamos. Este fichero se escribe en formato markdown, el cual tiene una sintaxis especial. (Mas información en https://markdown.es/)
  • .gitignore: Esta opción nos crea un fichero .gitignore dentro de nuestro repositorio. Este fichero tiene la funcionalidad de indicarle a Git qué ficheros ignorar en el flujo de trabajo. Esto es muy útil por si tenemos ficheros con credenciales, como puede ser nombre y usuario de una base de datos. Estos ficheros son comúnmente llamados “.env”
  • Licencia: Esta opción nos permite asignarle una licencia a nuestro repositorio. Estas licencias nos permiten decidir que se puede y que no se puede hacer con nuestro código fuente. (Mas información en https://docs.github.com/es/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository)

Una vez seleccionadas todas las opciones que queramos, clickamos en “Create repository”, y ya tendremos creado nuestro repositorio. Se vera algo asi si no hemos elegido ninguna opción de crear ficheros.

Visualización del repositorio en GitHub

Ya creado, tenemos nuestra pagina de inicio del repositorio.

Nos indica unos cuantos comandos, y uno de ellos es el que nos interesa, que es el siguiente:

Indicando cuál es el comando de interés

Ese comando lo copiamos y lo introducimos en nuestro terminal.

Una vez introducido, ya estará nuestro repositorio remoto conectado a nuestro repositorio local.

Básicamente, añade un origen remoto a través de SSH, que es que está indicado al final.

Flujo de trabajo

Git sigue un flujo de trabajo en sus ramas. Este consta de cuatro fases:

  1. Creación o modificación de un archivo
  2. Staging
  3. Commit
  4. Sincronización con el Repositorio Remoto

Para seguir el flujo de trabajo en el repositorio, usaremos el comando “git status”.

Creación o modificación de un archivo

Primero, empezaremos creando un fichero, en mi caso usare vim, pero puedes usar el editor de texto que quieras.

Primero, vamos a comprobar como se ve git status sin añadir ningún fichero:

Mostrando la salida del comando git status

Nos dice en la branch en la que estamos, que no hemos hecho ningún commit, y que no hay nada en lo que hacer commit. Entonces, vamos a crear un fichero. Lo llamaré “prueba.txt” y añadiré un poco de texto:

Creando un fichero y leyéndolo

Aquí vemos que se ha creado el fichero. Vamos a comprobar nuestro git status

Mostrando salida del comando git status

Ya nos esta diciendo que hay un fichero que esta “untracked”, porque no se ha stageado todavía, asi que vamos a ello.

Staging

Para pasar un fichero a la fase “staging”, ejecutamos el comando “git add” seguido del nombre del fichero que queramos pasar:

git add prueba.txt

Ahora, si verificamos el “git status”, vemos que ha cambiado de fase:

Mostrando la salida de git status después del staging

Ya nos está diciendo que el fichero puede ser commiteado. También, si nos hemos equivocado, podemos unstagearlo con el comando que nos indica arriba. Se vería asi:

Borrando fichero del staging

Vemos que se quita del flujo de Git, pero el fichero no desaparece.

Vamos a dejarlo añadido para pasar a la siguiente fase.

Commit

Para commitear el fichero, usaremos el comando “git commit” con el parámetro “-m” si queremos indicar un mensaje. Este mensaje se suele utilizar para indicar que cambios se han hecho, y que finalidad tiene el commit. Como es nuestro primer commit diremos “first commit, probando git”

Comando de commit

Una vez hecho el commit, vemos que nos da una salida el comando, indicándonos la rama en la que hemos hecho el commit, el id del commit, el mensaje, la cantidad de ficheros que han sido cambiados, cuantas líneas se han insertado, y que se ha hecho con el fichero.

Si hacemos “git status” vemos que el fichero ha desaparecido, porque ya paso el commit que es la fase final del ciclo de vida, por lo que los cambios estarían hechos.

Mostrando el estado del repositorio despues de hacer commit

Si queremos deshacer un commit, tenemos varias posibilidades:

  • git reset HEAD~1: Deshace el último commit y mantiene los cambios en la carpeta.
  • git reset --soft HEAD~1: Deshace el ultimo commit y mueve los cambios a staging.
  • git revert HEAD: Crea un nuevo commit que deshace los cambios del anterior commit.

Ahora mismo no utilizaremos ninguno, porque además solo tenemos un cambio y si intentamos revertir el primer commit no podremos, porque la carpeta estaría vacía.

Sincronización con el Repositorio Remoto

Si vamos ahora a nuestro repositorio remoto, no habrá nada:

Mostrando que el repositorio remoto está vacio

Para sincronizar nuestros cambios con el repositorio remoto, usaremos el comando “git push” seguido del parámetro “-u origin main”. El parámetro lo que hace es indicarle a Git que rama tiene que seguir y en que repositorio. “Origin” hace referencia al nombre del servidor remoto y “main” hace referencia al nombre de la rama o branch.

Haciendo el push a el repositorio

Una vez ejecutado vemos que no ha habido ningún problema, además de un poco de información extra, como el numero de bytes subidos, cual es el origen, la branch que se ha modificado, y que la branch main a sido configurada para trackear la branch remota “main” en “origin”.

Ahora, si vamos a nuestro repositorio en Github y recargamos la página, podemos ver los cambios:

Mostrando el repositorio en GitHub con un archivo

Si nos fijamos, vemos que el mensaje de commit que escribimos anteriormente se ve reflejado, por lo que es muy útil ser descriptivos:

Así tendríamos una guía básica de cómo usar Git y como conectar el repositorio en remoto.

Compártelo si te ha gustado!