Git: repo содержит пустой каталог - что происходит?

Git отслеживает файлы, а не каталоги, а мы не можем в настоящее время add пустые каталоги (стандартный трюк не добавляет пустой каталог, но вместо этого файл внутри, см. Также FAQ).

Тем не менее, git repo может содержать пустой каталог. Итак, что происходит, я клонировал репо или проверил ветку, содержащую пустой каталог? Создано ли это в дереве работ?

Ответ 1

Чтобы настроить тестовый репозиторий с пустым каталогом, вы можете использовать следующий script (запустите его во временной строке).

Однако при проверке пустая директория игнорируется. Здесь также Git работает только с файлами, а не с каталогами, даже если последние присутствуют.

Github и tig отображают пустые каталоги, gitk нет.

#!/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