15

Gitはディレクトリではなくファイルを追跡し、現在addディレクトリを空にすることはできません(標準的なトリックでは、空のディレクトリは追加されませんが、その中にファイルが追加されます。FAQも参照してください)。

それでも、gitrepoには空のディレクトリが含まれる場合があります。リポジトリのクローンを作成したり、空のディレクトリを含むブランチをチェックアウトしたりするとどうなりますか? 作業ツリーに作成されていますか?

4

1 に答える 1

18

空のディレクトリでテスト リポジトリをセットアップするには、次のスクリプトを使用できます (一時ディレクトリで実行します)。

ただし、チェックアウト時には、空のディレクトリは無視されます。ここでも、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
于 2012-07-22T13:58:49.550 に答える