Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Git存储库中按作者统计每个文件路径名的提交数?_Git - Fatal编程技术网

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

如何在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 ...

虽然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
...
谢谢

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