Seb*_*rin 39
这是一个老帖子,但如果有人还在寻找它:
安装git extras
brew install git-extras
Run Code Online (Sandbox Code Playgroud)
然后
git summary --line
Run Code Online (Sandbox Code Playgroud)
https://github.com/tj/git-extras
Von*_*onC 18
由于SO问题"如何计算Git存储库中特定作者改变的总行数?" 并不完全令人满意,commandlinefu有替代品(尽管不是每个分支):
git ls-files | while read i; do git blame $i | sed -e 's/^[^(]*(//' -e 's/^\([^[:digit:]]*\)[[:space:]]\+[[:digit:]].*/\1/'; done | sort | uniq -ic | sort -nr
Run Code Online (Sandbox Code Playgroud)
它包含二进制文件,这是不好的,所以你可以(删除真正随机的二进制文件):
git ls-files | grep -v "\.\(pdf\|psd\|tif\)$"
Run Code Online (Sandbox Code Playgroud)
(注意:由trcarden 评论,a 或选项不起作用.
从手册页,只会排除未跟踪的内容,如果 或者已添加到命令中.)-x--excludegit ls-filesgit ls-files -x "*pdf" ...--others--ignoredgit ls-files
要么:
git ls-files "*.py" "*.html" "*.css"
Run Code Online (Sandbox Code Playgroud)
仅包含特定文件类型.
不过,基于" git log"的解决方案应该更好,例如:
git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'
Run Code Online (Sandbox Code Playgroud)
但同样,这是针对一条路径(此处为2次提交),而不是针对每个分支的所有分支.
一线代码(支持时间范围选择):
git log --since=4.weeks --numstat --pretty="%ae %H" | sed 's/@.*//g' | awk '{ if (NF == 1){ name = $1}; if(NF == 3) {plus[name] += $1; minus[name] += $2}} END { for (name in plus) {print name": +"plus[name]" -"minus[name]}}' | sort -k2 -gr
Run Code Online (Sandbox Code Playgroud)
说明:
git log --since=4.weeks --numstat --pretty="%ae %H" \
| sed 's/@.*//g' \
| awk '{ if (NF == 1){ name = $1}; if(NF == 3) {plus[name] += $1; minus[name] += $2}} END { for (name in plus) {print name": +"plus[name]" -"minus[name]}}' \
| sort -k2 -gr
# query log by time range
# get author email prefix
# count plus / minus lines
# sort result
Run Code Online (Sandbox Code Playgroud)
输出:
user-a: +5455 -3471
user-b: +5118 -1934
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28081 次 |
| 最近记录: |