While git-blame and counting number of lines changed by an author within a git repository are helpful, is there a command that can list all of the pathnames modified in a repo across all commits by either an author or set of authors that scores each file by the number of commits by that author or set of authors? E.g. the output from running such a command in a cloned git repo would be similar to:
1 /path/to/some/file/in/repo/file1
34 /path/to/some/file/in/repo/file2
3 /path/to/some/other/file/in/repo/anotherfile
...
Thanks!
Just realized that if you use --name-only
to print the filenames, pretty format as empty string, and use this method to sort, uniq, and sort by top number of commits, in *nix/OS X, you could use:
git log --name-only --author=John --pretty=format: | sort | uniq -c | sort -nr
Be sure that you are using the right author.
E.g. if we were trying to find DHH's authors in Rails, we might do:
git log --format='%aN <%aE>' | LC_ALL='C' sort -u | grep avid
and notice that all of DHH's authors in the Rails git repo use the name "David Heinemeier Hansson". So, then we could do:
git log --name-only --author="David Heinemeier Hansson" --pretty=format: | sort | uniq -c | sort -nr
Which might output:
3624
611 actionpack/CHANGELOG
432 activerecord/CHANGELOG
329 railties/CHANGELOG
206 activerecord/lib/active_record/base.rb
195 activesupport/CHANGELOG
157 actionpack/lib/action_controller/base.rb
153 railties/Rakefile
108 activerecord/lib/active_record/associations.rb
79 actionpack/lib/action_view/helpers/javascript_helper.rb
75 activerecord/lib/active_record/validations.rb
74 activerecord/test/base_test.rb
69 actionmailer/CHANGELOG
66 railties/lib/rails_generator/generators/applications/app/app_generator.rb
66 activerecord/Rakefile
66 actionpack/lib/action_controller/caching.rb
60 actionpack/lib/action_controller/routing.rb
59 railties/lib/initializer.rb
59 actionpack/Rakefile
57 actionpack/lib/action_controller/request.rb
...
So, as of 2015-02-21, there were 3624 files in the Rails git repo that it appears he never personally made commits to, the top number of commits for a file was the ActionPack CHANGELOG at 611 commits, followed by the ActiveRecord CHANGELOG, and ActiveRecord::Base was the Ruby file he made the most commits to.
If you want to exclude the number of files not touched from the counts, use --format=
instead of --pretty=format:
, e.g.:
git log --name-only --author="David Heinemeier Hansson" --format: | sort | uniq -c | sort -nr
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With