只是想知道这是否可以在GIT命令行中使用。
我试图找到行数"更新"两次修改之间。我已经能够找到帮助使用git diff与--stat和--shortstat --numstat选项。它似乎只显示我添加和删除的#行。即使更新了一行,也会将其计为1次删除和1次插入。这是真的?是否有选项或任何实用程序(命令行)给我一个插入,更新和删除的#lines的细分?
答案 0 :(得分:0)
虽然不存在直接从Git执行此操作的能力(至少从2.13.0开始),但您可以通过解析统一差异来自己完成,前提是您对构成更改行的内容做了一些假设。 / p>
如果N个删除后跟N个添加= N个更改行,那么这里是一个基于GNU awk的解决方案,它只输出统一差异补丁中添加/删除/更改的行数:
BEGIN {
inhunk = 0
adds = 0
deletes = 0
changes = 0
hunk_adds = 0
hunk_deletes = 0
}
function calcChanges() {
delta = hunk_adds - hunk_deletes
changes += (hunk_deletes < hunk_adds ? hunk_deletes : hunk_adds)
adds += (delta > 0 ? delta : 0)
deletes += (delta < 0 ? -delta : 0)
hunk_adds = 0
hunk_deletes = 0
}
/^@@|^diff/ {
calcChanges()
inhunk = ($1 == "@@") ? 1 : 0
}
/^+/ {
if (inhunk) {
hunk_adds += 1
}
}
/^-/ {
if (inhunk) {
hunk_deletes += 1
}
}
/^ / {
if (inhunk && hunk_adds + hunk_deletes > 0) {
calcChanges()
}
}
END {
calcChanges()
print "Lines added: " adds
print "Lines deleted: " deletes
print "Lines changed: " changes
}
此脚本将按如下方式运行:
git diff ... | awk -f path/to/script.awk
Lines added: 1
Lines deleted: 11
Lines changed: 2
如果在一个Hunk中有N次删除后紧接着N个删除,则上面考虑一组N行被改变。例如:
diff --git a/blah.txt b/blah.txt
index deadbeef..ba5eba11 100644
--- a/blah.txt
+++ b/blah.txt
@@ -1,4 +1,4 @@
context
-deleted line
-deleted line
+added line
+added line
context
...计算2个更改的行。
diff --git a/blah.txt b/blah.txt
index deadbeef..ba5eba11 100644
--- a/blah.txt
+++ b/blah.txt
@@ -1,3 +1,4 @@
context
-deleted line
+added line
+added line
context
...计为1个更改的行和1个添加的行。
diff --git a/blah.txt b/blah.txt
index deadbeef..ba5eba11 100644
--- a/blah.txt
+++ b/blah.txt
@@ -1,4 +1,3 @@
context
-deleted line
-deleted line
+added line
context
...计为1个更改的行和1个删除的行。
最后,
diff --git a/blah.txt b/blah.txt
index deadbeef..ba5eba11 100644
--- a/blah.txt
+++ b/blah.txt
@@ -1,6 +1,6 @@
context
+added line
context
-deleted line
+added line
context
-deleted line
context
...计为1个添加的行,1个更改的行,1个删除的行。
可以扩展脚本以列出每个文件的这些统计信息,但我一直保持简单,以显示一般的想法。