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
解释:
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
#!/bin/sh
declare -A map
while read line; do
if grep "^[a-zA-Z]" <<< "$line" > /dev/null; then
current="$line"
if [ -z "${map[$current]}" ]; then
map[$current]=0
fi
elif grep "^[0-9]" <<<"$line" >/dev/null; then
for i in $(cut -f 1,2 <<< "$line"); do
map[$current]=$((map[$current] + $i))
done
fi
done <<< "$(git log --numstat --pretty="%aN")"
for i in "${!map[@]}"; do
echo -e "$i:${map[$i]}"
done | sort -nr -t ":" -k 2 | column -t -s ":"
6条答案
按热度按时间fquxozlt1#
这是一个老职位,但如果有人仍然在寻找它:
安装git extras
那么
https://github.com/tj/git-extras
wecizke32#
一行代码(支持时间范围选择):
解释:
输出:
更新:也许有人会喜欢我的小脚本:https://github.com/alswl/.oOo./blob/master/local/bin/git-code-numbers-by-authors
yfjy0ee73#
由于the SO question "How to count total lines changed by a specific author in a Git repository?"并不完全令人满意,因此commandlinefu具有替代方案(尽管不是针对每个分支):
它包括二进制文件,这是不好的,所以你可以(删除真正随机的二进制文件):
(Note:如trcarden所述,
-x
或--exclude
选项不起作用。如果
--others
或--ignored
被添加到git ls-files
命令中,git ls-files -x "*pdf" ...
将仅从git ls-files
man page中排除 * 未跟踪 * 内容。)或者:
以仅包括特定文件类型。
不过,"
git log
"-based solution应该更好,例如:但这同样是针对一个路径(这里是2个提交),而不是针对每个分支的所有分支。
ovfsdjhp4#
下面这个脚本就可以做到这一点。把它放到www.example.com中authorship.sh,chmod +x它,你就可以做好一切了。
2eafrhcq5#
在我的repos中,我已经从一行程序中得到了很多无用的输出,所以这里有一个Python脚本来做这件事:
请注意,脚本的参数将传递给
git ls-files
,因此如果您只想显示Python文件:blame_stats.py '**/*.py'
如果只想显示一个子目录中的文件:
blame_stats.py some_dir
等等。
qeeaahzv6#
从How to count total lines changed by a specific author in a Git repository?开始
以下命令的输出应该可以相当容易地发送到脚本,以便将总数相加:
这会给出当前HEAD上所有提交的统计信息。如果你想把其他分支的统计信息加起来,你必须把它们作为参数提供给git log。