Git:获取回购中未注释行的总数

kda*_*bir 3 git bash zsh

是否有一个命令得到公正的总数是在当前的git回购改变.我想考虑分阶段和非分阶段文件.

这是我能得到的最接近的

$ git diff --cached --shortstat
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git diff --shortstat
 1 file changed, 1 insertion(+)
Run Code Online (Sandbox Code Playgroud)

但我必须执行两个命令,然后解析(非常容易出错,你永远不知道所有情况)结果找到已更改的数.

如果不是git命令,bash/zsh函数也可以.

更新:

所以我的想法是在我的ZSH提示上跟踪总未提交的行(显示git工作目录的大致肮脏程度),例如:

[~/dotfiles] (master) ? [192]
$ ...
Run Code Online (Sandbox Code Playgroud)

所以感谢@ arco444的回答,我稍微修改了一下,我现在已经关注了,就好像有人想要实现同样的目标一样

function git_change_count {
    local IS_INSIDE_REPO=$(git rev-parse --is-inside-work-tree 2>/dev/null)
    if [[ $IS_INSIDE_REPO == "true" ]]; then
        { git diff --cached --numstat; git diff --numstat; } | awk '{ a+=($1+$2) } END {print a}'
    fi
}
Run Code Online (Sandbox Code Playgroud)

我添加了添加和删除行的行,而不是获取他们的差异.这实际上意味着编辑的行显示为2,但这样做涵盖了添加和删除两个不同行的情况,并且由于减法,我们得到0作为结果.

arc*_*444 8

怎么样:

{ git diff --cached --numstat; git diff --numstat; } | awk '{ a+=($1-$2) } END {print a}'
Run Code Online (Sandbox Code Playgroud)

--numstat标志为您提供:

#added #deleted #filename
Run Code Online (Sandbox Code Playgroud)

您需要为分阶段和非分段文件运行它,然后通过管道进行awk算术运算.它将返回添加和删除行的总和,因此如果删除的行数多于添加的行数,则会得到否定结果.