我进行了搜索,但没有找到任何结果;因此,决定看看社区在这方面能提供什么。
当您提交到 GitHub 时,它会执行差异。差异会告诉您添加了多少 lines 以及删除了多少 lines。
从指标的角度来看,考虑到我使用的许多语言并不依赖于空白字符来运行,这并没有给我留下太多印象。因此,可以在一行中定义具有 50 个方法的整个类(当然,您不会这样做)。
测量线可以让我们相信单线解决方案本质上比替代方案更好。
所以,我很好奇是否有办法让 GitHub(或一般的 Git)显示非空白字符计数的差异。
示例:
class Something
{
function hello()
{
}
}
更改为:
class Something {
function hello() {
}
}
会导致这样的结果:
行变化:-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 存储库中调用它。
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