如何在Git存储库中按作者计算每个文件路径名的提交次数?

Gar*_*ver 12 git

虽然git-blame计数 git存储库中的作者更改的行数是有帮助的,但是有一个命令可以列出所有提交中的repo中修改的所有路径名,作者或作者集对每个文件进行评分根据该作者或作者集的提交数量?例如,在克隆的git仓库中运行这样一个命令的输出类似于:

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
...
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gar*_*ver 16

刚刚意识到,如果你使用--name-only打印文件名,漂亮的格式为空字符串,并使用此方法进行排序,uniq,并按最大提交次数排序,在*nix/OS X中,您可以使用:

git log --name-only --author=John --pretty=format: | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)

确保您使用的是正确的作者.

例如,如果我们试图在Rails中找到DHH的作者,我们可能会:

git log --format='%aN <%aE>' | LC_ALL='C' sort -u | grep avid
Run Code Online (Sandbox Code Playgroud)

并注意到DHH在Rails git repo中的所有作者都使用"David Heinemeier Hansson"这个名字.那么,我们可以这样做:

git log --name-only --author="David Heinemeier Hansson" --pretty=format: | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)

可能输出:

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
  ...
Run Code Online (Sandbox Code Playgroud)

因此,截至2015-02-21,Rails git repo中有3624个文件,看起来他从未亲自提交过,文件提交的最大数量是611提交的ActionPack CHANGELOG,其次是ActiveRecord CHANGELOG和ActiveRecord :: Base是他提交的最多的Ruby文件.

如果要从计数中排除未触及的文件数,请使用--format=而不是--pretty=format:,例如:

git log --name-only --author="David Heinemeier Hansson" --format: | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)