Git: el repositorio contiene un directorio vacío, ¿qué sucede?

1 minuto de lectura

avatar de usuario de tiwo
dos

Git rastrea archivos, no directorios, y actualmente no podemos add directorios vacíos (El truco estándar no agrega un directorio vacío, sino un archivo dentro, vea también el Preguntas más frecuentes).

Sin embargo, un idiota repo puede contener un directorio vacío. Entonces, ¿qué sucede si clono un repositorio o pago una rama que contiene un directorio vacío? ¿Se crea en el árbol de trabajo?

Para configurar un repositorio de prueba con un directorio vacío, puede usar el siguiente script (ejecutarlo en un directorio temporal).

Sin embargo, al realizar el check-out, se ignora el directorio vacío. Aquí también, Git solo trabaja con archivos, no con directorios, incluso si estos últimos están presentes.

Github y tig mostrar directorios vacíos, gitk no es.

#!/bin/bash
set -e

echo ---- initialize the repo...
#rm -rf .git
git init

echo ---- create an empty tree object...
empty_tree=$(git mktree < /dev/null)

echo ---- create a parent tree containing the empty subtree...
root_tree_ls=$(echo -e 040000 tree $empty_tree\\tvacuum)
root_tree=$(echo "$root_tree_ls" | git mktree)

echo ---- commit...
commit_msg="This commit contains an empty directory"
commit=$(git commit-tree $root_tree -m "$commit_msg")

echo ---- create a branch...
git branch master $commit

# output the ids:
echo ----------------------------------------------------
echo "empty tree:" $empty_tree
echo "root tree: " $root_tree
echo "commit:    " $commit

  • De hecho, esto agrega el árbol vacío al repositorio. Pero clonar el repositorio no crea el directorio vacío en su árbol de trabajo.

    – manu

    24 de diciembre de 2013 a las 22:49

  • para los no creyentes: git archive master | tar tv 🙂

    – Michael Šrajer

    21 de noviembre de 2019 a las 10:07

¿Ha sido útil esta solución?