一般问题
我如何告诉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行。如果仔细查看该文件的diff输出(git show),可以看到实际上有30行添加和25行删除,这使得5添加了和3删除的行有所不同。更仔细地看,添加的行中有5条空行,删除的行中有4条空行。
这种行为在git log --shortstat或git log --stat中是一样的。
在我看来,所有空行都是,而不是由git log --numstat计算的。
如何用git计算每个提交中添加和删除的行数,包括空行
发布于 2011-09-23 11:42:56
上下文
对于相同的更改,有几个不同的(有效)修补程序。主要的区别是上下文行的使用。统一差异通常在每次更改之前和之后使用三行上下文。在内部,git (有时)使用零行上下文,这可能导致不同的更改行。
第一个解决方案:外部工具
正如@karl已经描述的那样,人们可以将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显示的输出修补程序。使用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行上下文。
发布于 2011-08-19 14:59:33
我数了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 '^-(?!-)'https://stackoverflow.com/questions/7122833
复制相似问题