小编典典

使用 Git 检查脏索引或未跟踪文件

all

如何检查我的 git 存储库中是否有任何未提交的更改:

  1. 添加到索引但未提交的更改
  2. 未跟踪的文件

从脚本?

git-statusgit 版本 1.6.4.2 似乎总是返回零。


阅读 72

收藏
2022-05-10

共1个答案

小编典典

好时机!几天前我写了一篇关于这个的博客文章,当时我想出了如何将 git 状态信息添加到我的提示符中。

这就是我所做的:

  1. 对于脏状态:

    # Returns "*" if the current git branch is dirty.
    

    function evil_git_dirty {
    [[ $(git diff –shortstat 2> /dev/null | tail -n1) != “” ]] && echo “*”
    }

  2. 对于未跟踪的文件(注意--porcelain标志,git status它可以为您提供很好的可解析输出):

    # Returns the number of untracked files
    

    function evil_git_num_untracked_files {
    expr git status --porcelain 2>/dev/null| grep "^??" | wc -l
    }

虽然git diff --shortstat更方便,但您也可以git status --porcelain用于获取脏文件:

# Get number of files added to the index (but uncommitted)
expr $(git status --porcelain 2>/dev/null| grep "^M" | wc -l)

# Get number of files that are uncommitted and not added
expr $(git status --porcelain 2>/dev/null| grep "^ M" | wc -l)

# Get number of total uncommited files
expr $(git status --porcelain 2>/dev/null| egrep "^(M| M)" | wc -l)

注意:2>/dev/null过滤掉错误消息,以便您可以在非 git 目录上使用这些命令。(他们只会返回0文件计数。)

2022-05-10