我在我的repo上有以下Github操作。(为了示例起见,)我希望我的工作流在推送的提交上添加一个git notes
(即运行git notes add -m "foo bar"
)。
但是,我得到了以下错误:
致命错误:引用refs/notes/commits
的update_ref失败:无法锁定引用refs/notes/commits
:* * 无法创建/home/runner/work/repo_name/repo_name/.git/refs/notes/commits.lock
:权限被拒绝**
目前为止我尝试的方法是:
- 我以为使用
${{ github.token }}
会有所帮助,但事实并非如此。 - 我确保在存储库的Settings/Actions/General/Workflow权限中设置了"Read and Write permissions"。
- 这也不是
chmod +x
的问题,因为我直接运行命令。 - 将工作流权限设置为
write-all
(如Azeem所建议)也不能解决这个问题。
这可能是并发问题吗?
Github操作YAML文件:
name: Notes
on:
workflow_dispatch:
permissions: write-all
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ github.token }}
- name: Add git notes
id: git-notes
run: |
git config user.name "Github Actions"
git config user.email "bot@github.actions"
git notes add -m "foo bar"
env:
GITHUB_TOKEN: ${{ github.token }}
日志:
Run git config user.name "Github Actions"
git config user.name "Github Actions"
git config user.email "bot@github.actions"
git notes add --allow-empty -m "foo bar"
shell: /usr/bin/bash -e {0}
env:
GITHUB_TOKEN: ***
Removing note for object HEAD
fatal: update_ref failed for ref 'refs/notes/commits': cannot lock ref 'refs/notes/commits': Unable to create '/home/runner/work/marion_test_notes/marion_test_notes/.git/refs/notes/commits.lock': Permission denied
Error: Process completed with exit code 128.
2条答案
按热度按时间ar7v8xwq1#
刚刚尝试使用此工作流重现您的方案:
但是,它的工作很好。
以下是工作流运行(注解使用
git notes show
验证):由于问题似乎不与工作流程,您可能需要检查是否有任何分支保护规则阻碍这对您的一方.
bjp0bcyl2#
多亏了Azeem's minimal working example,我已经解决了我的问题。
在我的例子中,产生这个错误是因为提交已经有了一个注解(由工作流的一个单独步骤添加)。
基于Azeem的解决方案,我遇到了导致工作流失败的其他问题,例如:
actions/checkout
步骤来同步的),长话短说,下面是一个工作流,它在检出的head上稳健地添加了一个
git notes
:说明:
git fetch origin refs/notes/*:refs/notes/*
:"Pull"已经存在于repo中的git notes
(否则,当您尝试将新注解推回上游时,会发生冲突),git config
:创建git
ID,需要添加一条注解,并向上游推送。git notes add
:添加您的备注--allow-empty
:如果您的消息为空(例如,已由工作流的上一步骤生成),--force
:以防您再次运行工作流(因此提交已经有了注解)。请注意(很明显),这将覆盖任何已经存在的git notes
。否则,您可以查看git notes append
。git notes show
:廉价日志记录git push origin refs/notes/*
:将note推回上游(即推到git repo),以便它在工作流结束时仍然存在。git notes
documentationgit notes
与上游