是否有git命令显示哪些文件由谁提交/编辑?
输出应该是:
FileName AuthorName
fileA user1 user2
fileB user 3
fileC user1
答案 0 :(得分:1)
您必须使用自己的git log --pretty=format
选项。
在--pretty
中,您可以设置颜色并选择要显示的任何内容。
在您的情况下,您想要显示作者 - 选择
中的任何一个%aX - 根据您的需求选择。
<强>
format:<string>
强>格式:格式允许您指定要显示的信息。它的工作方式有点像printf格式,但有一个值得注意的例外,即你得到一个%n而不是\ n的换行符。
格式:
The author of %h was %an, %ar%nThe title was >>%s<<%n
将显示如下内容:
The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
<强>
The placeholders are
强>:
%C(…):
颜色规范,如color.branch。* config选项中所述;添加自动,在开始时将仅在为日志输出启用颜色时发出颜色(通过color.diff,color.ui或--color,并且如果我们要去终端则尊重前者的自动设置)。单独自动(即%C(自动))将打开下一个占位符的自动着色,直到再次切换颜色。
%C(…):
颜色规范,如color.branch。* config选项中所述;添加自动,在开始时将仅在为日志输出启用颜色时发出颜色(通过color.diff,color.ui或--color,并且如果我们要去终端则尊重前者的自动设置)。单独自动(即%C(自动))将打开下一个占位符的自动着色,直到再次切换颜色。
%Cblue:
将颜色切换为蓝色
%Cgreen:
将颜色切换为绿色
%Cred:
将颜色切换为红色
%Creset:
重置颜色
%D:
引用名称没有“(”,“)”包装。
%G?:
显示“G”表示签名,“B”表示不良签名,“U”表示良好的不可信签名,“N”表示无签名
来自GPG的%GG:
原始验证消息,用于签署的提交%GK:
显示用于签署签名提交的密钥%GS:
显示签名提交的签名者姓名%H:
提交哈希
%N:
提交备注
%P:
父哈希郎%T:
树形散列
%aD:
作者日期,RFC2822样式
%aE:
作者电子邮件(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%aI:
作者日期,严格的ISO 8601格式
%aN:
作者姓名(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%ad:
作者日期(格式尊重 - 日期=选项)
%ae:
作者电子邮件
%ai:
作者日期,类似ISO 8601的格式
%an:
作者姓名
%ar:
作者日期,亲属
%at:
作者日期,UNIX时间戳
%b:
身体%cD:
提交者日期,RFC2822样式
%cE:
提交者电子邮件(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%cI:
提交者日期,严格的ISO 8601格式
%cN:
提交者名称(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%cd:
提交者日期(格式尊重 - 日期=选项)
%ce:
提交者电子邮件
%ci:
提交者日期,类似ISO 8601的格式
%cn:
提交者姓名
%cr:
提交者日期,相对
%ct:
提交者日期,UNIX时间戳
%d:
引用名称,如git-log(1)的--decorate选项%e:
编码
%f:
已清理的主题行,适用于文件名
%gD:
reflog选择器,例如,refs / stash @ {1}%gE:
reflog身份电子邮件(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%gN:
reflog身份名称(尊重.mailmap,请参阅git-shortlog(1)或git-blame(1))
%gd:
缩短了reflog选择器,例如,stash @ {1}%ge:
reflog身份电子邮件
%gn:
reflog身份名称
%gs:
reflog主题
%h:
缩写提交哈希
%m:
左,右或边界标记
%n:
换行符%p:
缩写为父哈希值%s:
主题
%t:
缩写树哈希
%w([<w>[,<i1>[,<i2>]]]):
切换换行,就像git-shortlog(1)的-w选项一样%x00:
从十六进制代码中打印一个字节
答案 1 :(得分:1)
我不认为你可以通过一个git命令实现这一目标。
在sh
,bash
或zsh
,您可以执行此操作:
git ls-files -z | xargs --null -L1 -I % sh -c "printf %' '; git annotate -p % | sed -nr '/^author /{s/^author (.*)/\1/;p}' | sort | uniq | awk '{printf (\$0 \" \")}END{print \"\"}'"
或者,更具可读性:创建脚本文件print_file_and_its_authors.sh
:
#!/bin/sh
printf $1' ' # Output filename without appending a line break.
# Output file authors and a line break:
git annotate -p $1 \
| sed -nr '/^author /{s/^author (.*)/\1/;p}' \
| sort | uniq \
| awk '{printf ($0 " ")}END{print ""}'
然后做:
chmod u+x print_file_and_its_authors.sh
git ls-files -z | xargs --null -L1 ./print_file_and_its_authors.sh
答案 2 :(得分:0)
如果您知道特定文件或文件,则可以使用git log --pretty=%an -- some_file | sort -u
为每个文件列出编辑此文件的作者。至于您期望的输出格式,您可能需要更进一步。此命令列出当前HEAD的所有文件,包括已删除的文件及其编辑器。
git log --pretty="/ %h" --name-only | grep -v ^$| grep -v ^/ | sort -u | while read line
do
authors=$(git log --pretty=%an -- "$line" | sort -u)
echo $line,$authors
done
git log --pretty="/ %h" --name-only | grep -v ^$| grep -v ^/ | sort -u
部分是查找所有文件,包括已删除的文件。我认为必须有一些更简单的方法。