geekzhu
geekzhu

Reputation: 37

How to count up the total lines of every committer in a git repository

I want to count up total lines of every committer in a git repository. I only get a solution below:

git log --format='%aN' | sort -u | \
  while read name; do
    echo -en "$name\t"
    git log --author="$name" --pretty=tformat: --numstat | \
    awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
  done

It can calculate out ALL HISTORY of every committer's total lines. But I want to calculate out in CURRENT snapshot, every committer's total lines. I don't know how to do it.

Do you have a solution about this problem?

Upvotes: 2

Views: 331

Answers (2)

rich
rich

Reputation: 19414

I found the accepted answer slow and broke for me with GPG signed commits.

This worked:

git ls-files | xargs -n1 git blame --line-porcelain | sed -n 's/^author //p' | sort -f | uniq -ic | sort -nr

Upvotes: 0

Pavan Yalamanchili
Pavan Yalamanchili

Reputation: 12109

This is a bit overkill and slow but you can do something like this.

git log --format='%aN' | sort -u | \
  while read name; do
    echo -en "$name\t"
    for FILE in $(git ls-files) ; do git blame $FILE | grep "$name" ; done | wc -l
  done

Upvotes: 2

Related Questions