Git:获取每天更改的行数

ern*_*sto 29 git

我想每天和/或每周在git存储库中添加/删除/更改行的图表.我不是要算提交的数目.

是否有可以生成此类图表的工具(gitstats没有)?或者,使用哪个git命令我可以生成一个我可以轻松解析的输出?

谢谢!

Sve*_*ach 28

也许是这样的:

$ git diff --shortstat "@{1 month ago}" 
 7 files changed, 29 insertions(+), 6 deletions(-)
Run Code Online (Sandbox Code Playgroud)

(正如您所看到的,我在一个非常陈旧的存储库上尝试过这个.)

请注意,这会将当前工作目录与当前分支在本地计算机上一个月前指向的内容进行比较.

编辑:要获取master特定日期范围内分支上所有提交的统计信息,您可以使用

git log --after=2011-01-01 --before=2011-01-31 --format=format: --shortstat master
Run Code Online (Sandbox Code Playgroud)


Jua*_*blo 26

#!/bin/bash                                                                                                                                                                         
a=""                                                                                                                                                                                
b=""                                                                                                                                                                                
for i in $(seq 1 10)                                                                                                                                                                
do                                                                                                                                                                                  
    b=$(git diff --shortstat "@{ $i day ago }")                                                                                                                                     
    if [[ "$b" != "$a" ]]; then                                                                                                                                                     
        echo $i "day ago" $b                                                                                                                                                        
    fi                                                                                                                                                                              
    a=$b                                                                                                                                                                            
done 
Run Code Online (Sandbox Code Playgroud)

产量

1 day ago 2 files changed, 144 insertions(+), 21 deletions(-)
3 day ago 2 files changed, 227 insertions(+), 73 deletions(-)
Run Code Online (Sandbox Code Playgroud)

要旨

  • 大!!`git diff --shortstat"@ {1天前}""` (15认同)
  • 有没有办法在一段时间内获得shartstat?也就是说,指定"3天前"和"2天后" (2认同)

gnm*_*itt 6

这是一个 bash 脚本,用于计算每周更改的行总数:

#!/bin/bash

ds() {
  date --date="$1 weeks ago" +%Y-%m-%d
}
BRANCH=master # your branch here

echo "Week,Lines Changed"
for week in {80..1}
do
  # git log outputs lines like:
  # 11        10      path/to/your/file.java
  #  => add first two columns with awk
  lines=$(git --no-pager log --after=$(ds $week) --before=$(ds $(($week - 1))) --format=format: --numstat $BRANCH | awk '{s+=$1; s+=$2} END {print s}')
  echo "$(ds $week),$lines"
done
Run Code Online (Sandbox Code Playgroud)

输出为 CSV 格式,如下所示:

Week,Lines Changed
2016-12-21,5989
2016-12-28,17179
Run Code Online (Sandbox Code Playgroud)


小智 5

我只是在存储库中需要累积的diffstat一段时间而不依赖于reflog(因为repo是刚刚克隆的).因此我想出了这个:

( eval $(git log --pretty="%H" --since="2 day" | while read line; do if [[ -z ${first} ]]; then first=${line}; echo "export first=${first}"; fi; echo "export last=${line}"; done; ) ; git diff --stat ${first} ${last}; )

你可以轻松修改"2天"以获得别的东西:)


小智 5

我的上述脚本版本,用于每天的统计数据,具有良好的格式化输出......

#!/bin/bash
# Calculate num of changed, new lines on git per days (show your productivity)

ds() {
  date --date="$1 days ago" +%Y-%m-%d
}

echo "GIT changes stat: Date, Total lines modified (New added, Changed)"
for week in {13..0}
do
  # git log outputs lines like:
  # 11        10      path/to/your/file.java
  #  => add first two columns with awk
  lines_all=$(git --no-pager log --after=$(ds $week) --before=$(ds $(($week - 1))) --format=format: --numstat | awk '{s+=$1; s+=$2} END {print s/1}')
  lines_chg=$(git --no-pager log --after=$(ds $week) --before=$(ds $(($week - 1))) --format=format: --numstat | awk '{s+=$1;} END {print s/1}')
  lines_new=$(git --no-pager log --after=$(ds $week) --before=$(ds $(($week - 1))) --format=format: --numstat | awk '{s+=$2}  END {print s/1}')
  #echo -e "$(ds $week): $lines_all \t\t(new: $lines_new, \tchanged: $lines_chg)"
  printf "%10s: %10s \t\t(new: %10s, \tchanged: %10s)\n" $(ds $week) $lines_all $lines_new $lines_chg
done
Run Code Online (Sandbox Code Playgroud)