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

时间:2015-11-05 12:41:54

标签: git bash zsh

是否有命令可以获得当前git仓库中更改的的总数。我想计算考虑分阶段和非分阶段文件。

这是我能得到的最接近的

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

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

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

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

更新:

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

[~/dotfiles] (master) ✗ [192]
$ ...

感谢@ 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
}

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

2 个答案:

答案 0 :(得分:8)

怎么样:

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

--numstat标志为您提供:

#added #deleted #filename

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

答案 1 :(得分:2)

试试这个:

git diff --numstat |  cut -d$'\t' -f 1 | paste -sd+ - | bc

此处git diff --numstat提供每个文件的添加和减少的数量(由制表符分隔)。 cut命令按选项卡拆分字段,选择第一个字段(添加)。 paste命令从数字列创建添加,bc命令执行总和。以上是补充。您可以将-f 1替换为-f 2来进行减法。如果您想要添加和减少,请尝试:

git diff --numstat |  cut -d$'\t' -f 1,2 | tr '\t' '+' | paste -sd+ -  | bc

在使用tr

之前,只使用paste在每一行上插入附加符号