【发布时间】:2017-09-27 19:12:39
【问题描述】:
是否有命令获取当前 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 作为结果的情况。
【问题讨论】:
-
这两个命令将重复计算在两个位置发生变化的行。这对我来说似乎是一件奇怪的事情。这里的最终目标是什么?
-
@EtanReisner 这个想法是捕获给定 git 工作目录的“脏”。它不必是精确的。如果在非暂存版本中再次更改,如果已暂存的行被计算两次,我没关系。
-
@kunal 我喜欢这个,你是如何添加显示在提示顶行的功能?
-
@Ziv 只需调用提示变量中的函数,如
PROMPT='....$(git_change_count)...'。PROMPT字符串中的新行将被保留,因此您会在提示符下获得新行。