GitHub diff:计算字符而不是行数

问题描述 投票:0回答:2

我进行了搜索,但没有找到任何结果;因此,决定看看社区在这方面能提供什么。

当您提交到 GitHub 时,它会执行差异。差异会告诉您添加了多少 lines 以及删除了多少 lines

从指标的角度来看,考虑到我使用的许多语言并不依赖于空白字符来运行,这并没有给我留下太多印象。因此,可以在一行中定义具有 50 个方法的整个类(当然,您不会这样做)。

测量线可以让我们相信单线解决方案本质上比替代方案更好。

所以,我很好奇是否有办法让 GitHub(或一般的 Git)显示非空白字符计数的差异。

示例:

class Something
{
    function hello()
    {
    }
}

更改为:

class Something {
    function hello() {
    }
}

会导致这样的结果:

行变化:-2 字符变化:0

git github metrics code-metrics
2个回答
0
投票

我遇到了同样的问题,并尝试使用

--word-diff
参数来解决它。
tl;博士

git diff


一些解释:

    echo $(git diff --cached --word-diff --color | grep -oP '\x1b\[[0-9;]*m\{\+([^\x1b]*)\+\}\x1b' | cut -d+ -f 2- | rev | cut -d+ -f 2- | tr -d '\n' | wc -c) - $(git diff --cached --word-diff --color | grep -oP '\x1b\[[0-9;]*m\[\-([^\x1b]*)\-\]\x1b' | cut -d- -f 2- | rev | cut -d- -f 2- | tr -d '\n' | wc -c) | bc
  • 打印当前暂存的单词 diff 与 HEAD 的差异。

  • git diff --cached --word-diff --color
  • 过滤所有添加的内容(如果在 git 配置中更改了颜色)。

  • grep -oP '\x1b\[[0-9;]*m\{\+([^\x1b]*)\+\}\x1b'
  • 过滤周围 
    cut -d+ -f 2- | rev | cut -d+ -f 2-
    {+
    之间的内容的复杂版本,我无法想出可靠的替代版本。
  • +}
  • 计算没有换行符的字符。

  • 第二部分实际上完全相同,但对于已删除的内容,匹配
tr -d '\n' | wc -c

[-
而不是
-]
{+
。 毕竟
+}
echo
连接两个数字,这样
-
就可以计算差异。
一个附加评论:我选择了彩色输出,因为这使得模式匹配更加容易(如果您添加了用于匹配开始或结束的字符,例如

bc

+}
,...)
这里基本上是用 Python 编写的相同逻辑:

[-

将其保存在文件中并从 git 存储库中调用它。


0
投票

from subprocess import Popen, PIPE import re process = Popen(["git", "diff", "--cached", "--word-diff", "--color"], stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() if stderr: print(stderr.decode()) exit(1) stdout = stdout.decode() added = re.findall(r"\x1b\[[0-9;]*m\{\+([^\x1b]*)\+\}\x1b", stdout) deleted = re.findall(r"\x1b\[[0-9;]*m\[-([^\x1b]*)-\]\x1b", stdout) num_added = sum(len(a) for a in added) num_deleted = sum(len(d) for d in deleted) print(num_added - num_deleted)

输出:3

git diff abc.txt | grep "+" |grep -c -v "@@"

输出:

git diff abc.txt

© www.soinside.com 2019 - 2024. All rights reserved.