首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从最近的推送中获取所有提交的主题

从最近的推送中获取所有提交的主题
EN

Stack Overflow用户
提问于 2016-05-13 04:57:45
回答 2查看 46关注 0票数 0

作为CI构建的一部分,我们有一个脚本,它部署项目的最新版本,并在对应的PR上留下一个注释,其中包含来自上一次提交的主题,以及到deploy的链接。

然而,如果开发人员同时向PR推送多个提交,则这些构建有时包含来自多个提交的更改。我想修改脚本,使包含链接的消息也包含来自每个新提交的主题行。

当前的实现只获得最近的提交,有一行类似于下面的代码:

代码语言:javascript
复制
COMMIT_MESSAGE=$(git --no-pager log --pretty=format:"%s" -1)

是否有类似的方式可以与git交互,以获取来自与上述最近提交相同的推送的所有提交的消息?

EN

回答 2

Stack Overflow用户

发布于 2016-05-13 05:18:42

你可能需要在你的团队git服务器中配置update git钩子。

钩子接收三个命令行参数:被推入的引用的名称、其先前状态的SHA-1、其新状态的SHA-1。因此,钩子中的git log --pretty=format:"%s" $2..$3将为您提供所需的日志。

您应该专门处理分支创建和删除的情况,此时对应的SHA-1将被清零:

代码语言:javascript
复制
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,所以如果你需要的话,你可以通过这些前缀来区分它们。

票数 1
EN

Stack Overflow用户

发布于 2016-05-13 05:08:58

您需要在pull请求之前跟踪提交,但如果您可以获得提交散列,则可以使用以下更新的git log命令:

代码语言:javascript
复制
git --no-pager log --pretty=format:"%s" <git_hash>..HEAD

例如,以下是我的一个repos的输出:

代码语言:javascript
复制
> 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散列来显示两次提交之间的所有消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37197283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档