Git: 如何获取所有未跟踪文件的列表,忽略未跟踪的子模块?

Git: How to get a listing of all untracked files, ignoring untracked submodules?

在脚本中,我想检查 Git 存储库是否干净。万一它不干净,应该把变化藏起来。对于支票,我使用:

git diff-index HEAD --

找出被跟踪文件的修改并:

git ls-files --others

确定是否存在未跟踪的文件。不幸的是,git ls-files --others 还会报告无法隐藏的未跟踪子模块。

是否有一些选项或不同的 Git 命令 returns 与 git ls-files --other 相同的结果 除了未跟踪的子模块 ?

git 无法查看未跟踪的目录是否应该 成为子模块。它只是一个未跟踪的目录。

您可能会检查 .git 子目录,以检查未跟踪的目录是否实际上是 git 存储库;类似于:

for untracked in $(git ls-files --others)
do
    if [ ! -e $untracked/.git ]
    then
        echo $untracked
    fi
done

这将打印不是 git 存储库的未跟踪 files/directories。

Git别名

您可以像这样将其设置为 git 别名:

git config --global alias.untracked-not-repo '!'"bash -c 'for untracked in $(git ls-files --others); do if [ ! -e $untracked/.git ]; then echo $untracked; fi; done'"

现在你可以像

一样使用它了
git untracked-not-repo