【问题标题】:Git - list all authors of a folder of files?Git - 列出文件文件夹的所有作者?
【发布时间】:2014-09-08 14:00:51
【问题描述】:

如何列出由 git 版本控制的特定文件夹的作者姓名?

我看到我可以git blame 一个文件并列出每一行的作者,但我不能对一个文件夹这样做,而且我也想要一个唯一的列表(每个作者只列出一次)

【问题讨论】:

  • 我认为您应该编写一个 shell 脚本来执行此操作,使用 for-loop、pipe、grep、sort、uniq 等。此外,git blame 不会显示所有作者,只会显示最后一个-modifiers,我认为你应该用 git log 来做。

标签: git


【解决方案1】:

实际上,有一个原生的 Git 命令,git shortlog

git shortlog -n -s -- myfolder

将给出一个贡献者列表,这些贡献者创建了涉及myfolder 的提交。选项-s 表示摘要,仅显示每个贡献者的提交次数。没有它,该命令会列出每个作者的提交消息摘要(第一行)。选项 -n 按提交次数(从多到少)而不是按字母顺序对作者进行排序。

并且以防万一您还没有在 git 命令中遇到松散的--:它是一个分隔选项,用于标记后面的内容不能是<revspec>(提交范围),而只能是<pathspec> (文件和文件夹名称)。这意味着:如果您省略了 -- 并且偶然有一个名为 myfolder 的分支或标签,那么命令 git shortlog -n -s myfolder不会过滤目录 myfolder,而是过滤分支或标签的历史“myfolder”。因此,此分隔符在许多 git 命令中很有用(且必要),例如 logcheckout,只要您想清楚您指定的是修订版(提交、分支、标签)还是路径(文件夹或文件名)。当然,这个网站已经has a question了。

【讨论】:

  • -- 是做什么的?
  • git shortlog 接受 <revision range> 参数。如果 myfolder 偶然成为标签或分支的名称,则短日志将仅限于该标签的提交历史记录。许多 git 命令使用分隔符 -- 来指定后面的内容可能只是文件或目录名称(路径规范),而不是命令或修订。
  • @AaronFranke 感谢您的提问;现在我还直接在答案中加入了-- 部分,并链接到 SO 上的规范问题。
【解决方案2】:

基于The shortest possible output from git log containing author and date

这样做

git log --pretty=format:"%an%x09" myfolder | sort | uniq

【讨论】:

  • 我发现这更可靠:git log --pretty=format:"%an%x09" myfolder | sort | uniq -c | sort -t ' ' -k 1 -r
  • 文件夹或文件。
  • 我认为在查看下面的git shortlog 时,这个答案现在不是最理想的。正确答案应该是另一个。
【解决方案3】:

如果您只需要存储库的作者列表:

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

如果您想按代码贡献的行数来为文件排序,这很简单:

git blame --line-porcelain "_MY_FILE_" | sed -n 's/author //p' | sort | uniq -c | sort -rn

如果您想为整个存储库也按代码贡献排序:

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

【讨论】:

  • 非常有用git blame --line-porcelain| grep author 为 unix 哲学带来解脱
猜你喜欢
  • 1970-01-01
  • 2014-07-30
  • 2020-07-02
  • 2021-08-30
  • 2018-08-06
  • 2013-05-08
  • 2015-08-12
  • 2011-05-11
相关资源
最近更新 更多