git:在发布/标记中获取*新*贡献者(作者)列表

git:在发布/标记中获取*新*贡献者(作者)列表,git,git-log,Git,Git Log,我正在为发布准备changelog,并做一些统计 很容易列出以前版本的贡献者: git shortlog -s -e -n TAG.. 评审员: git log TAG.. | grep -Ei '(reviewed|acked)-by:' |sed 's/.*by: //' | sort | uniq -c | sort -n -r 提交人: git shortlog -s -e -n -c TAG.. 但是如何列出TAG之后的新贡献者(作者)(例如那些在TAG之前没有提交过的人)?假设

我正在为发布准备changelog,并做一些统计

很容易列出以前版本的贡献者:

git shortlog -s -e -n TAG..
评审员:

git log TAG.. | grep -Ei '(reviewed|acked)-by:' |sed 's/.*by: //' | sort | uniq -c | sort -n -r
提交人:

git shortlog -s -e -n -c TAG..

但是如何列出
TAG
之后的新贡献者(作者)(例如那些在
TAG
之前没有提交过的人)?

假设您可以使用
bash
,至少有两种方法:

#/bin/bash
set-e
OLD_COMMIT=“$1”
NEW_COMMIT=“$2”
如果test-z“$OLD_COMMIT”| | test-z“$NEW_COMMIT”;然后
echo“致命:必须提供旧的提交和新的提交”>&2
出口1
fi
班次2
首先,使用Bash4中引入的声明性数组(以命令式方式模拟右外部联接):

declare-一个老作者
而读r老作者;做
老作者[“$OLD_AUTHOR”]=1

做了。<非常感谢!我希望会有一艘邮轮:)。Ad
bash
:我想把它转换成posix shell(没有像数组那样的bashism),以便能够在
busybox sh
中使用它(
ash
实现,在Alpine Linux中使用),但这是一个小细节。@pevik您在问题中没有提到这一点。我通常不会想到bash,因为我只使用bash,但第二个“4行程序”似乎也是一个。在您的情况下,我认为应该使用临时文件?谢谢您的回答,它是有效的(因此我将其标记为有效)。我问这个问题的原因是想知道是否存在类似于
git shortlog
的git上游解决方案。编写一个自定义脚本来解决这个问题并不困难,但我正在考虑将此功能上游到git shortlog
git中。
c3d766e  (tag: v2) Keith
cffddc6  New John
ee3cc52  Dan
c307f13  (tag: v1) New John
ae3c4a3  New John
9ed948e  Old John
7eb548a  Old John
Dan
Keith