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

标签 git bash directory 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

然而,它看起来非常粗糙和脆弱。有没有更好的办法?

最佳答案

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

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

注意:不要轻易尝试没有 -ngit clean,它可以清除你家里的东西。

关于git - 如何判断当前工作目录是否被 Git 忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10840285/

相关文章:

arrays - Swift - 视频文件数组可以很好地保存到应用程序库,但不能正确保存到应用程序文档目录

java - 是否建议将此进程拆分为不同的线程?

eclipse - 无法将新文件添加到 EGit 中的存储库

Git 删除目录语法

bash - 在kubernetes pods容器中循环运行n次命令

bash - 如何使用bash提取没有标签的网页源代码?

python - 对于循环,os.listdir() 无法正常工作

svn - 具有多个开发人员的 Matlab Simulink 版本控制

bash - 如何更改 Git 命令行界面的语言?

linux - 我如何在 Windows 上运行 Ubuntu 的/bin/bash