如何在Git存储库中按作者统计每个文件路径名的提交数?
虽然git存储库中的作者和由作者修改的路径名很有帮助,但是是否有一个命令可以列出一个作者或一组作者在repo中修改的所有路径名,并根据该作者或一组作者的提交次数对每个文件进行评分?例如,在克隆的git repo中运行此类命令的输出类似于:如何在Git存储库中按作者统计每个文件路径名的提交数?,git,Git,虽然git存储库中的作者和由作者修改的路径名很有帮助,但是是否有一个命令可以列出一个作者或一组作者在repo中修改的所有路径名,并根据该作者或一组作者的提交次数对每个文件进行评分?例如,在克隆的git repo中运行此类命令的输出类似于: 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 ...
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
...
谢谢 PowerShell示例
显示当前工作树中每个文件的指定作者的提交计数
缩略形式
长形
笔记
表示在新行上继续执行命令`
表示将生成的对象输送到下一个命令|
从管道输入对象访问属性$\ SomeProperty
- 您可以将此目录复制/粘贴到PowerShell中,因为
标记表示新行`
- 包括
,以同时跟踪以前删除的文件和其他分支过滤器分支
- 包括
以迭代所有项目作者git log--format='%aN'| sort-u
刚刚意识到,如果您使用
--name only
打印文件名,格式为空字符串,并在*nix/OS X中使用排序、uniq和按提交次数排序,您可以使用:
git log --name-only --author=John --pretty=format: | sort | uniq -c | sort -nr
确保您使用的是正确的作者
例如,如果我们试图在Rails中找到DHH的作者,我们可能会:
git log --format='%aN <%aE>' | LC_ALL='C' sort -u | grep avid
这可能会输出:
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
...
因此,截至2015年2月21日,Rails git repo中有3624个文件,他似乎从未亲自提交过,文件提交次数最多的是ActionPack变更日志(611次提交),其次是ActiveRecord变更日志,ActiveRecord::Base是他提交最多的Ruby文件
如果要从计数中排除未接触的文件数,请使用--format=
而不是--pretty=format:
,例如:
git log --name-only --author="David Heinemeier Hansson" --format: | sort | uniq -c | sort -nr
你打算做工资决定吗?:)不。我只是想确定代码中可以重点关注的部分,而使用“按作者提交每个文件”将是确定员工离职时知识转移需要重点关注的部分代码的一种方法。你愿意写一个批处理文件吗?如果是这样,您可以使用
git rev list HEAD--count--author=someDude--somefile.txt
创建计数输出。这是如何工作的?我想对它进行调整,以便在repo中获得每个顶级目录的提交,或者至少获得每个文件的完整路径。如果你还有其他问题,请告诉我。这真是太棒了,它真的帮助了我。非常感谢。
git log --format='%aN <%aE>' | LC_ALL='C' sort -u | grep avid
git log --name-only --author="David Heinemeier Hansson" --pretty=format: | sort | uniq -c | sort -nr
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
...
git log --name-only --author="David Heinemeier Hansson" --format: | sort | uniq -c | sort -nr