向他人仓库提交PR时Prettier GitHub Action执行失败求助
问题:向他人仓库提交PR时Prettier GitHub Action检查失败
我在仓库中配置了Prettier GitHub Action,向自己仓库推送代码或提交PR时,检查都能正常通过;但向他人仓库提交PR时,代码虽然能成功格式化,检查却失败了,日志如下:
Run creyD/prettier_action@v4.2 Run PATH=$(cd $GITHUB_ACTION_PATH; npm bin):$PATH /home/runner/work/_actions/creyD/prettier_action/v4.2/entrypoint.sh Installing prettier... Prettifying files... Files: about.html 50ms contact.html 13ms directoryscr.js 60ms index.html 10ms member.html 10ms members/osenberg.json 6ms members/rehwinkel.json 4ms members/template.json 3ms memberscr.js 25ms membersdir.html 43ms memberslist.json 5ms README.md 88ms No node_modules/ folder. No package-lock.json file. [detached HEAD ad83deb] Prettified Code! Author: iosenberg <iosenberg@users.noreply.github.com> 5 files changed, 69 insertions(+), 74 deletions(-) fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD) state now, use git push origin HEAD:<name-of-remote-branch> Error: Process completed with exit code 128.
我已经尝试了多种方法,但没找到相关文档,恳请指点解决方向,参考分支为仓库的prettier分支。
解决方向
- 问题根源:处理跨仓库PR时,GitHub Actions默认会检出PR的具体提交而非完整分支,导致Action处于分离HEAD状态,无法直接推送格式化后的代码。
- 方案1:在Action的
actions/checkout步骤中添加fetch-depth: 0参数,拉取完整的仓库历史,确保能正确关联到PR的源分支。 - 方案2:修改Prettier Action的推送逻辑,明确指定推送目标分支,比如将推送命令改为
git push origin HEAD:${GITHUB_HEAD_REF},利用GitHub提供的环境变量获取PR的源分支名。 - 方案3:更换为支持fork PR场景的Prettier Action,部分维护完善的Action会自动处理分离HEAD的问题。
- 额外注意:跨仓库PR需要目标仓库的所有者为Action授予写入权限,否则即使修复了分支状态问题,也无法推送格式化后的代码。
内容的提问来源于stack exchange,提问作者Ike Osenberg
相关产品推荐
相关产品推荐

