GitHub Action如何从最后一次git提交复制user.name和user.email配置
解决方案
你可以直接从本地Git历史中提取触发本次推送的提交作者信息,不需要依赖GitHub预置环境变量,操作如下:
修改Git配置部分代码
将原配置user.name和user.email的两行替换为从提交历史提取的命令即可,由于你执行git reset前HEAD默认指向用户推送的原始提交,直接读取最近1次提交的元信息即可:
# 直接提取当前HEAD对应提交的作者名和邮箱配置Git git config user.name "$(git log -1 --pretty=format:%an)" git config user.email "$(git log -1 --pretty=format:%ae)"
完整修改后的step代码
- name: Upload build files to repo run: | # 配置Git提交信息为原始提交的作者信息 git config user.name "$(git log -1 --pretty=format:%an)" git config user.email "$(git log -1 --pretty=format:%ae)" # 回滚到上一次提交之前,保留原始提交的所有变更到工作区 git reset --soft HEAD~1 # 添加构建产物文件 git add (build files) # 复用原始提交的提交信息生成新提交 git commit -C HEAD@{1} # 强制推送覆盖历史 git push --force
补充说明
- 由于你在
actions/checkout时设置了fetch-depth: 2,可以正常读取到最近提交的所有元信息,无需拉取完整仓库历史。 - 如果你希望逻辑更稳妥,也可以在
git reset操作之前就把作者信息存入临时变量,避免提交指针变动导致读取异常:# 提前读取原始提交信息存为变量 ORIGINAL_NAME=$(git log -1 --pretty=format:%an) ORIGINAL_EMAIL=$(git log -1 --pretty=format:%ae) git config user.name "$ORIGINAL_NAME" git config user.email "$ORIGINAL_EMAIL"
配置完成后,Action生成的提交作者、提交者信息和原始推送的提交完全一致,不会出现GitHub识别到提交者信息不匹配的问题。
内容的提问来源于stack exchange,提问作者Jordan Barrett
相关产品推荐
相关产品推荐

