如何判断Git是否忽略当前的工作目录?

eca*_*mur 4 git directory bash gitignore

我有一个git控制目录(实际上是我的主目录),其中有被忽略的目录(例如垃圾空间和其他VCS控制的目录).我希望能够让我的bash提示符显示目录是否受版本控制,如果是,则由哪个VCS控制,但是例如git rev-parse总是找到最顶层的.git目录.

有没有办法问git我是否在一个未跟踪的目录中?

我发现这个工作:

if ! git rev-parse 2>&/dev/null; then
    echo "not in git"
else
    PREFIX=$(git rev-parse --show-prefix)
    if [ -z "$PREFIX" ]; then
        echo "at git top level"
    elif [ -z $(cd $(git rev-parse --show-toplevel); \
          git ls-files -o --directory "${PREFIX%%/}")
        echo "tracked by git"
    else
        echo "untracked"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

然而,它似乎非常hackish和脆弱.有没有更好的办法?

Vi.*_*Vi. 5

git clean -nd方法:如果忽略目录,git clean -d则要删除它,这样就可以轻松检查当前目录的状态.

if git clean -xnd `pwd` | grep 'Would remove \./' > /dev/null; then
    echo "Inside ignored or untracked directory"
else
    echo "Inside normal directory"
fi
Run Code Online (Sandbox Code Playgroud)

调整git clean以更改有关未跟踪文件的规则.检查我的$ HOME存储库.

注:没有尝试git clean没有-n掉以轻心,它可以从你家明确的事情.