Curso git nivel medio

Repositorios: locales y remotos

Git se basa en la idea de un repositorio para gestionar los cambios en un proyecto. Un repositorio es una base de datos que almacena todos los archivos del proyecto y su historial de cambios. En Git, existen dos tipos de repositorios: locales y remotos, y entender cómo interactúan entre sí es esencial para trabajar con Git de manera eficiente.

Repositorio local

Un repositorio local es el que se encuentra en tu máquina y contiene todo el historial de cambios del proyecto. Este repositorio está completamente bajo tu control y es donde puedes realizar operaciones de manera privada, como hacer commits, crear ramas, ver el historial, y realizar fusiones, sin necesidad de estar conectado a internet o a un servidor remoto.

Crear un repositorio local

Puedes convertir cualquier carpeta en un repositorio de Git usando el comando git init. Este comando crea un nuevo repositorio local en el directorio actual. Aquí te explico cómo hacerlo:

  1. Inicializar un repositorio:

    • Primero, navega al directorio de tu proyecto o crea uno nuevo:
      1mkdir mi-proyecto
      2cd mi-proyecto
    • Luego, inicializa Git en esa carpeta:
      1git init
    • Esto creará una subcarpeta oculta llamada .git, que contiene todo lo necesario para que Git pueda realizar un seguimiento de los cambios en tu proyecto.
  2. Agregar archivos al repositorio local:

    • Crea o agrega archivos en tu directorio. Por ejemplo, puedes crear un archivo index.html:
      1echo "<h1>Hola Git</h1>" > index.html
  3. Añadir los archivos al área de stage:

    • Git no realiza un seguimiento automático de los archivos, por lo que debes "añadir" los archivos al área de preparación (staging area):
      1git add index.html
  4. Hacer un commit:

    • Una vez que los archivos están en el área de stage, puedes hacer un commit. Un commit es como un "punto de control" en el que guardas una instantánea de los cambios:
      1git commit -m "Primer commit: agregar index.html"

    Con esto, has guardado los cambios en tu repositorio local. Puedes hacer varios commits mientras trabajas en tu proyecto, y Git almacenará un historial de cada uno de ellos, permitiéndote ver cómo ha cambiado el proyecto con el tiempo.

Interacción con el repositorio local

Algunas operaciones comunes que puedes realizar en un repositorio local son:

  • git status: Muestra el estado de los archivos en el repositorio. Esto te dice qué archivos han sido modificados, cuáles están en el área de stage, y si hay algún archivo nuevo sin seguimiento.

    1git status
  • git log: Muestra el historial de commits, incluyendo el hash de cada commit, el autor, la fecha y el mensaje del commit.

    1git log
  • git diff: Muestra las diferencias entre el estado actual de tus archivos y el último commit.

    1git diff

Repositorio remoto

Un repositorio remoto es una copia de tu repositorio que se encuentra en un servidor o plataforma en la nube, como GitHub, GitLab o Bitbucket. Los repositorios remotos son fundamentales cuando trabajas en equipo o quieres mantener una copia de tu proyecto en línea, permitiendo la colaboración y la sincronización entre múltiples usuarios.

Características de un repositorio remoto

  1. Sincronización: Los repositorios remotos permiten que varios desarrolladores trabajen en un proyecto al mismo tiempo desde diferentes ubicaciones. Los desarrolladores pueden enviar sus cambios al servidor remoto (con git push) y obtener los cambios realizados por otros (con git pull).

  2. Backup y seguridad: Un repositorio remoto sirve como una copia de seguridad de tu proyecto. Incluso si pierdes los archivos en tu máquina local, puedes recuperar todo el historial de cambios desde el servidor remoto.

  3. Colaboración: Al usar repositorios remotos, puedes abrir el proyecto a contribuciones externas mediante forks y pull requests, como es común en proyectos de código abierto.

Clonar un repositorio remoto

Para empezar a trabajar con un repositorio remoto existente (por ejemplo, en GitHub o GitLab), debes clonar el repositorio. Clonar un repositorio crea una copia completa del repositorio remoto en tu máquina local.

  1. Clonar un repositorio:

    • Ve al repositorio en GitHub, GitLab u otro servidor Git, copia la URL del repositorio, y luego usa el comando git clone en tu terminal:
      1git clone https://github.com/usuario/repositorio.git
    • Esto creará una copia completa del repositorio (incluyendo todo su historial) en tu máquina local.
  2. Navegar al repositorio clonado:

    • Después de clonar, puedes ingresar al directorio del repositorio y comenzar a trabajar en él:
      1cd repositorio

Vincular un repositorio local con un repositorio remoto

Si has creado un repositorio local y quieres asociarlo a un repositorio remoto (por ejemplo, para alojarlo en GitHub), puedes vincularlos usando el comando git remote.

  1. Crear un repositorio en GitHub/GitLab:

    • Primero, crea un nuevo repositorio vacío en GitHub o GitLab (sin un README.md ni archivos .gitignore al inicio).
  2. Añadir el repositorio remoto a tu repositorio local:

    • Luego, vincula tu repositorio local con el remoto usando git remote add:

      1git remote add origin https://github.com/usuario/repositorio.git
    • En este caso, origin es el nombre del repositorio remoto. Es el nombre predeterminado que Git usa, pero puedes darle cualquier nombre que prefieras.

  3. Subir tus cambios al repositorio remoto:

    • Después de vincular el repositorio remoto, puedes subir tus commits locales al servidor remoto con:

      1git push -u origin master
    • El parámetro -u establece origin como la referencia predeterminada para futuras operaciones git push, de modo que la próxima vez solo necesites ejecutar git push sin parámetros adicionales.

Interacción con el repositorio remoto

  • git fetch: Descarga los cambios desde el repositorio remoto, pero no los fusiona con tu repositorio local. Esto te permite revisar los cambios antes de integrarlos.

    1git fetch origin
  • git pull: Descarga y fusiona automáticamente los cambios del repositorio remoto en tu rama actual. Es una combinación de git fetch y git merge.

    1git pull origin master
  • git push: Envía tus commits locales al repositorio remoto. Este comando actualiza el servidor con tus últimos cambios.

    1git push origin master

Diferencias clave entre repositorios locales y remotos

  • Acceso:

    • Un repositorio local es accesible solo desde tu máquina. Todas las operaciones se realizan localmente, y no necesitas conexión a internet.
    • Un repositorio remoto está alojado en un servidor o plataforma en la nube (como GitHub o GitLab) y es accesible desde cualquier lugar. Es necesario tener acceso a internet para interactuar con el repositorio remoto.
  • Uso:

    • Los repositorios locales se usan para realizar cambios y commits en privado, realizar pruebas o desarrollos experimentales.
    • Los repositorios remotos son esenciales para la colaboración y sincronización en equipo. También sirven como una copia de seguridad del proyecto.
  • Sincronización:

    • Para mantener tu repositorio local y remoto en sincronía, necesitas usar comandos como git push para subir cambios y git pull para bajar los cambios hechos por otros colaboradores.

¿Qué es un commit?

Un commit en Git es una instantánea de los cambios que has realizado en tu proyecto en un momento determinado. Cada vez que realizas un commit, Git guarda el estado de los archivos que han sido preparados para ser versionados (en el Staging Area) y los almacena en el historial del repositorio. El commit incluye información como:

  • Los cambios realizados en los archivos.
  • Un mensaje descriptivo del commit (que escribes al hacer el commit).
  • La fecha y hora del commit.
  • Un identificador único (hash) para cada commit.
  • El autor del commit (nombre y correo).

Los commits permiten que puedas rastrear el historial de cambios en un proyecto, revertir a estados anteriores si es necesario, y colaborar con otros desarrolladores sin perder el control de qué cambios se hicieron y cuándo.

Realizar un commit en Git

El proceso básico para realizar un commit en Git consta de los siguientes pasos:

  1. Hacer cambios en los archivos.
  2. Añadir los archivos al Staging Area usando git add (esto prepara los archivos para ser versionados).
  3. Crear un commit con git commit, proporcionando un mensaje descriptivo.

Ejemplo:

1git add archivo.txt
2git commit -m "Actualizar archivo.txt con nuevas secciones"

Después de hacer un commit, Git almacena los cambios en el repositorio y los deja listos para ser compartidos con otros colaboradores (por ejemplo, usando git push).


Áreas de trabajo: Working Directory, Staging Area y Repository

En Git, los archivos de tu proyecto pasan por tres áreas diferentes durante el ciclo de vida de los cambios: Working Directory, Staging Area y el Repository. Estas áreas son cruciales para entender cómo Git maneja los archivos.

1. Working Directory (Directorio de trabajo)

El Working Directory es la carpeta en tu máquina donde tienes los archivos del proyecto. Aquí es donde creas, editas y eliminas archivos. Los archivos en este directorio son visibles y puedes trabajar en ellos como lo harías en cualquier otra carpeta.

  • Estado de los archivos en el Working Directory:
    • Archivos nuevos, modificados, o eliminados que no han sido añadidos al Staging Area.
    • Cambios realizados pero que aún no están listos para ser confirmados en el repositorio.

2. Staging Area (Área de preparación)

El Staging Area (también conocido como "Index") es un espacio intermedio donde colocas los archivos que están listos para ser incluidos en el próximo commit. Solo los archivos que están en el Staging Area serán versionados en el commit siguiente.

  • Funciones del Staging Area:
    • Permite agrupar cambios específicos antes de confirmarlos con un commit.
    • Te permite hacer commits parciales: es decir, puedes elegir solo ciertos archivos para el commit, dejando otros cambios fuera para un commit posterior.

Para mover archivos desde el Working Directory al Staging Area, se utiliza el comando git add:

1git add archivo.txt

Este comando indica a Git que archivo.txt está listo para ser versionado.

3. Repository (Repositorio)

El Repository es donde se almacenan permanentemente los commits. Cuando haces un commit, Git toma los archivos del Staging Area y los almacena en el repositorio. Esto incluye no solo el contenido de los archivos, sino también un registro del historial, permitiendo que más adelante puedas acceder a cualquier versión previa de tu proyecto.

  • Repository local: Cada vez que haces un commit, los cambios se guardan en el repositorio local en tu máquina.
  • Repository remoto: Para compartir tus cambios con otros colaboradores o mantener una copia de seguridad, puedes enviar (push) los commits a un repositorio remoto (por ejemplo, GitHub o GitLab).

Ciclo de vida de los archivos en Git: untracked, staged, modified, committed

En Git, los archivos pasan por diferentes estados en su ciclo de vida. Entender estos estados te ayuda a manejar eficientemente los cambios en tu proyecto.

1. Untracked (No rastreados)

Un archivo en estado untracked es un archivo que existe en el Working Directory pero que Git aún no está monitoreando. Git no lo tiene en cuenta porque nunca ha sido añadido al repositorio.

  • Situación: Un archivo nuevo que no ha sido añadido con git add.
  • Acción común: Para empezar a rastrear este archivo, se usa el comando git add.
1git add nuevo_archivo.txt

Después de añadirlo, el archivo pasa a estar en el Staging Area y cambia su estado a staged.

2. Staged (Preparados o en el área de stage)

Un archivo en estado staged es un archivo que ha sido añadido al Staging Area y está listo para ser incluido en el próximo commit. Git ya está monitoreando este archivo y lo incluirá en el repositorio cuando realices un commit.

  • Situación: El archivo ha sido preparado para ser versionado.
  • Acción común: Realizar un commit para confirmar los cambios.
1git commit -m "Añadir nuevo archivo"

3. Modified (Modificado)

Un archivo en estado modified es un archivo que ya ha sido rastreado por Git (es decir, se incluyó en un commit anterior), pero ha sido modificado desde entonces. Este archivo no está en el Staging Area, por lo que no será incluido en el próximo commit a menos que lo añadas manualmente.

  • Situación: Has realizado cambios en un archivo que Git ya conoce, pero esos cambios aún no están preparados para ser versionados.
  • Acción común: Para mover este archivo al Staging Area, usas git add.
1git add archivo_modificado.txt

Al hacerlo, Git lo marcará como staged, listo para el próximo commit.

4. Committed (Confirmado)

Un archivo en estado committed es un archivo que ha sido incluido en el historial de commits del repositorio. Esto significa que sus cambios están guardados de manera segura en el repositorio y puedes acceder a versiones anteriores en cualquier momento.

  • Situación: Los cambios han sido confirmados y versionados en el repositorio local.
  • Acción común: Después de hacer commits, puedes enviarlos al repositorio remoto usando git push.
1git push origin master

Este comando sube los commits al servidor remoto (como GitHub o GitLab).


Resumen del ciclo de vida de los archivos

  1. Untracked: El archivo es nuevo y Git no lo está rastreando.
  2. Staged: El archivo está preparado para ser versionado en el próximo commit.
  3. Modified: El archivo ha sido cambiado, pero los cambios no están preparados para ser confirmados.
  4. Committed: El archivo ha sido confirmado y sus cambios están almacenados de manera segura en el repositorio.

Cada estado es parte de un flujo de trabajo en Git, donde los archivos se mueven de un estado a otro a medida que los editas, los preparas para commit, y finalmente los confirmas en el repositorio. Entender estos estados te permite manejar tus proyectos de manera eficiente, manteniendo un control preciso sobre los cambios que realizas.

  • Loading...
  • Quieres clonar el repositorio https://github.com/kant003/Racing-Car-Katas en tu sistema.

    Loading...
  • Has creado un repositorio en tu maquina local. Vincula tu repositorio local con el remoto https://github.com/kant003/Racing-Car-Katas

    Loading...
  • Ya has guardado los cambios en el área de stage (staged area), ahora tienes que hacer un commit para guardas una instantánea de los cambios.

    Loading...
  • Sube tus cambios de tu rama master al repositorio remoto.

    Loading...