我该如何通过编程确定是否存在未提交的更改?

345
在 Makefile 中,如果工作树或索引中存在未提交的更改,我想执行某些操作。什么是最清晰和最高效的方法?一个命令,在一种情况下以零的返回值退出,在另一种情况下以非零的返回值退出,将适合我的目的。
我可以运行 `git status` 并将输出通过 `grep` 管道处理,但我觉得应该有更好的方法。

6
可能是与Git检查脏索引或未跟踪文件的问题相似。原文链接:https://dev59.com/M3E85IYBdhLWcg3wr1qx。 - jb.
这里有一个很好的答案:Unix & Linux: Determine if Git working directory is clean from a script - Gabriel Staples
11个回答

-3
这里是最好、最干净的方法。
function git_dirty {
    text=$(git status)
    changed_text="Changes to be committed"
    untracked_files="Untracked files"

    dirty=false

    if [[ ${text} = *"$changed_text"* ]];then
        dirty=true
    fi

    if [[ ${text} = *"$untracked_files"* ]];then
        dirty=true
    fi

    echo $dirty
}

4
不,这不是最好的方法。git status是一个“瓷器”命令。在脚本中不要使用瓷器命令,因为它们可能会因为Git版本的更改而发生变化。相反,使用“管道”命令。 - spuder
3
我认为如果你使用 git status --porcelain 来更新它(专门用于此目的--一种稳定的格式,可在脚本中解析),可能还可以加上 -z(以 null 代替换行符分隔?),你就可以利用这个想法做些有用的事情了。更多详情请见 https://dev59.com/r2w05IYBdhLWcg3w3lkl - msouth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接