使用git
时,如何告诉git log --stat
它还应该计算差异中的空行?
git clone https://github.com/voldemort/voldemort.git
cd voldemort
git log --numstat -n 1 c21ad76 contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java
git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java
在给定示例git log --numstat
提交c21ad76
的声明中,该文件HadoopStoreBuilderReducer.java
已添加 25 和 22已删除行。如果您仔细查看该文件的差异输出(git show
),您可以看到实际上已添加 30 和 25个行,其中通过 5添加和 3删除行使其不同。仔细观察一下,在添加的行hunk中有5个空行,在删除的行hunk中有4个空行。
此行为与git log --shortstat
或git log --stat
相同。
在我看来,git log --numstat
内所有空行都是不计算的。
如何使用git
计算每次提交的添加和删除行数包括空行?
答案 0 :(得分:2)
同一个更改有几个不同的(有效)补丁。主要区别在于使用上下文行。统一差异通常在每次更改之前和之后使用三行上下文。内部git(有时)使用零行上下文,这可能导致不同的更改行。
正如@ karl-bielefeldt所描述的,可以将git show
的结果导入grep -Pc '^\+(?!\+)'
或grep -Pc '^-(?!-)'
。有一个工具diffstat
就是这样做的:
$git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | diffstat
HadoopStoreBuilderReducer.java | 57 +++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 27 deletions(-)
可以配置git show的输出补丁。使用x的选项“-Ux”可以指定上下文。
$git show -U0 c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | diffstat
HadoopStoreBuilderReducer.java | 47 +++++++++++++++++++++--------------------
1 file changed, 25 insertions(+), 22 deletions(-)
这与内部git log --numstat
匹配,因为它使用0上下文来计算stat。请注意,此行为即将在git版本1.7.7中更改。使用该numstat使用3行上下文。
答案 1 :(得分:0)
我删除了27个,添加了30个。我不知道是否有办法用内部git做到这一点,但这对我有用:
git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | grep -Pc '^\+(?!\+)'
git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | grep -Pc '^-(?!-)'