作为CI构建的一部分,我们有一个脚本,它部署项目的最新版本,并在对应的PR上留下一个注释,其中包含来自上一次提交的主题,以及到deploy的链接。
然而,如果开发人员同时向PR推送多个提交,则这些构建有时包含来自多个提交的更改。我想修改脚本,使包含链接的消息也包含来自每个新提交的主题行。
当前的实现只获得最近的提交,有一行类似于下面的代码:
COMMIT_MESSAGE=$(git --no-pager log --pretty=format:"%s" -1)是否有类似的方式可以与git交互,以获取来自与上述最近提交相同的推送的所有提交的消息?
发布于 2016-05-13 05:18:42
你可能需要在你的团队git服务器中配置update git钩子。
钩子接收三个命令行参数:被推入的引用的名称、其先前状态的SHA-1、其新状态的SHA-1。因此,钩子中的git log --pretty=format:"%s" $2..$3将为您提供所需的日志。
您应该专门处理分支创建和删除的情况,此时对应的SHA-1将被清零:
refname="$1"
oldrev="$2"
newrev="$3"
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
echo "Updating \"$refname\" from \"$oldrev\" to \"$newrev\"" >&2
if [ "$oldrev" = "0000000000000000000000000000000000000000" ]; then
echo "\"$refname\" was created with rev \"$newrev\"" >&2
# do whatever you need for a new branch or _tag_
# you may do as described in http://stackoverflow.com/a/5720575/3159253
# to list only commits specific for a newly created branch/tag,
# with the only exception: the reference isn't yet created in the target repo,
# so you don't need to filter it out
LOG=$(git log --no-merges --pretty=oneline $newrev --not $(git for-each-ref --format="%(refname)") -- ) --
echo -e "New reference log\n$LOG\n===" >&2
exit 0
fi
if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
echo "\"$refname\" was deleted (last rev was \"$oldrev\"" >&2
# do whatever you need when a deleted branch or _tag_
exit 0
fi
LOG=$(git log --pretty=oneline $oldrev..$newrev)
echo -e "Changed reference log\n$LOG\n===" >&2有关更多详细信息,请查看Git Hooks docs。
记住,钩子是针对分支和标记执行的。分支机构名称以refs/heads开头。while标签--来自refs/tags,所以如果你需要的话,你可以通过这些前缀来区分它们。
发布于 2016-05-13 05:08:58
您需要在pull请求之前跟踪提交,但如果您可以获得提交散列,则可以使用以下更新的git log命令:
git --no-pager log --pretty=format:"%s" <git_hash>..HEAD例如,以下是我的一个repos的输出:
> git --no-pager log --pretty=format:"%s" d8ede574fd33cac4d78bda1bce08049962c7a405..HEAD
Update .coffee file as well
Update for RN 0.25
Uodat license to 2016
2.10.0
Merge pull request #66 from Hilzu/master%你没有提供足够的上下文来知道你是否有权在PR之前访问git散列,但是如果你没有,我无法想象没有它这是可能的。
如果您可以绑定到CI服务器上的git钩子,那将是最理想的,但如果您不能,如果您将流更改为拉取,则可以在拉取时看到提交。参见this answer。如果您获取,您可以比较原始和您的当前主,存储您当前的提交散列,合并您的拉取,然后使用git散列来显示两次提交之间的所有消息。
https://stackoverflow.com/questions/37197283
复制相似问题