Cómo comprobar si un directorio está siendo rastreado por Git

GitGitBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos cómo determinar si un directorio está siendo rastreado por Git. Exploraremos el contenido de un repositorio de Git utilizando el comando git ls-tree para inspeccionar los archivos y directorios en un commit específico.

Además, utilizaremos el comando git status para verificar el estado actual de seguimiento de los archivos dentro de nuestro repositorio y entender cómo Git maneja los directorios vacíos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/status("Check Status") subgraph Lab Skills git/git -.-> lab-560020{{"Cómo comprobar si un directorio está siendo rastreado por Git"}} git/status -.-> lab-560020{{"Cómo comprobar si un directorio está siendo rastreado por Git"}} end

Ejecutar git ls-tree para un directorio

En este paso, exploraremos el contenido de nuestro repositorio de Git utilizando el comando git ls-tree. Este comando nos permite ver el contenido de un objeto árbol (tree object), que representa el estado de un directorio en un commit específico.

Primero, asegúrate de estar en el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, usemos git ls-tree para ver el contenido del último commit. Usaremos HEAD para referirnos al último commit:

git ls-tree HEAD

Deberías ver una salida similar a esta:

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9	message.txt

Desglosemos esta salida:

  • 100644: Este es el modo de archivo, que indica que es un archivo regular.
  • blob: Esto indica el tipo de objeto. Un objeto blob almacena el contenido de un archivo.
  • a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9: Este es el identificador único (hash SHA-1) del objeto blob que almacena el contenido de message.txt. Tu hash será diferente.
  • message.txt: Este es el nombre del archivo.

El comando git ls-tree es útil para inspeccionar el contenido de un commit específico sin descargar (check out) el commit completo. Muestra los archivos y directorios que fueron rastreados por Git en ese momento.

Puedes pensar en ello como si estuvieras mirando dentro de una cápsula del tiempo específica (commit) para ver exactamente qué archivos se incluyeron y cuáles eran sus huellas digitales únicas (hashes de blob). Esta es una forma poderosa de entender la estructura y el contenido de la historia de tu proyecto.

Usar git status para verificar el seguimiento

En los pasos anteriores, creamos un archivo y lo confirmamos (committed) en nuestro repositorio de Git. Ahora, usemos nuevamente el comando git status para ver el estado actual de nuestro repositorio y confirmar que nuestro archivo está siendo rastreado.

Asegúrate de que todavía estés en el directorio ~/project/my-time-machine:

cd ~/project/my-time-machine

Ahora, ejecuta el comando git status:

git status

Deberías ver una salida similar a esta:

On branch master
nothing to commit, working tree clean

Esta salida nos dice algunas cosas importantes:

  • On branch master: Actualmente estamos en la rama (branch) master, que es la línea de tiempo principal de nuestro proyecto.
  • nothing to commit, working tree clean: Esta es la parte clave. Significa que no hay cambios en nuestro directorio de trabajo que aún no se hayan confirmado. Git está rastreando todos los archivos que se supone deben ser rastreados, y no hay archivos nuevos o modificados que necesiten ser agregados o confirmados.

Este es el estado deseado cuando has terminado de hacer cambios y los has confirmado. Confirma que Git está al tanto del estado actual de tu proyecto y que todo está actualizado en tu repositorio.

Comparar esta salida con la salida de git status que vimos antes de crear y confirmar message.txt resalta la diferencia entre un repositorio vacío, un repositorio con archivos no rastreados y un repositorio limpio con archivos rastreados.

Comprender git status es crucial porque es tu herramienta principal para saber lo que está sucediendo en tu repositorio y qué acciones necesitas tomar (como agregar o confirmar archivos).

Probar directorios vacíos

En este paso, exploraremos cómo Git maneja los directorios vacíos. Este es un punto común de confusión para los principiantes, ya que Git se comporta de manera diferente con los directorios en comparación con los archivos.

Primero, asegúrate de estar en el directorio ~/project/my-time-machine:

cd ~/project/my-time-machine

Ahora, creemos un nuevo directorio vacío dentro de nuestro proyecto:

mkdir empty-folder

Hemos creado el directorio. Ahora, comprobemos el estado de nuestro repositorio utilizando git status:

git status

Deberías ver una salida similar a esta:

On branch master
nothing to commit, working tree clean

Observa que Git no reporta empty-folder como un directorio no rastreado. Esto se debe a que Git rastrea el contenido de los archivos, no los directorios en sí. Un directorio vacío no tiene contenido para rastrear.

Este es un concepto importante en Git. Si necesitas incluir un directorio vacío en tu repositorio, la solución común es colocar un archivo ficticio (dummy file) dentro de él. Una práctica común es crear un archivo llamado .gitkeep (aunque el nombre no importa, es solo una convención).

Creemos un archivo .gitkeep dentro de empty-folder:

touch empty-folder/.gitkeep

Ahora, comprobemos git status nuevamente:

git status

Esta vez, deberías ver:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	untracked files present (use "git add" to track)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	empty-folder/

Ahora Git ve empty-folder/ porque contiene un archivo (.gitkeep) que se puede rastrear.

Esto demuestra que Git rastrea la presencia de archivos dentro de los directorios, en lugar de los directorios en sí. Para incluir un directorio en la historia de tu repositorio, debe contener al menos un archivo rastreado.

Resumen

En este laboratorio (lab), aprendimos cómo comprobar si un directorio y su contenido son rastreados por Git. Utilizamos el comando git ls-tree HEAD para inspeccionar el contenido del último commit (confirmación), entendiendo que muestra los archivos rastreados y sus objetos blob (objetos binarios) asociados y sus hashes. Este comando proporciona una instantánea del estado del repositorio en un commit específico.

También utilizamos el comando git status para verificar el estado actual de seguimiento de los archivos dentro del repositorio, confirmando que los archivos confirmados (committed) son efectivamente rastreados por Git. Finalmente, exploramos cómo Git maneja los directorios vacíos, descubriendo que Git no rastrea directamente los directorios vacíos, sino que rastrea los archivos dentro de ellos.