这可能是一个愚蠢的问题,但在这里我经过两天的头部撞击😔
我目前正在GitHub Actions上工作,在某个时候git push
会到达受保护的分支(实际上是master
)。但是,一旦进入此步骤,作业将失败,并显示“ 您无权推送”错误消息:
在我的情况下,这是第一次发生,这意味着该工作人员(CLI,bash
)完全未被授权。因此,我将其记录在专用的GitHub帐户中,这是我呆了几天的地方。
因此,如何通过CLI登录GitHub帐户?
这可以正常工作,因为授权是可以的,但它显然不是自动化的,这是我要的。
一些细节:
"ubuntu-18.04"
上运行;git push
之前,我已经从Windows凭据管理器中删除了所有与GitHub相关的登录,然后通过GitHub登录对话框窗口再次进行设置。按预期手动推送未经授权的凭据失败。
git remote set-url origin "https://$username:[email protected]/my/repo"
这似乎没有任何效果。我已经尝试过设置现有远程服务器的URL和使用不同URL的“添加后删除”的远程服务器,这两种方法似乎都一样(不起作用)。
以下配置均无效:
steps:
- run: git remote set-url origin "https://$username:[email protected]/my/repo"
- run: git push origin master
steps:
- run: git remote remove origin
- run: git remote add origin "https://$username:[email protected]/my/repo"
- run: git fetch origin --all # with and without this step
- run: git push origin master
curl -u "$username:$token" https://api.github.com/user
这是suggested in the docs,它的确成功,但是直到git push
为止登录都不会持续-即使推送是在同一步骤中进行的。我怀疑可能存在与Cookie相关的解决方案,但是我不确定它们在非浏览器环境中如何工作。另外,我相信此API是为不同目的而设计的。
这两个配置均失败:
steps:
# separate processes
- run: curl -u "$username:$token" https://api.github.com/user
- run: git push origin master
steps:
# same process
- run: |
curl -u "$username:$token" https://api.github.com/user
git push origin master
actions/checkout@v2
现在将在设置token
输入时配置并保留身份验证。您不需要手动配置原始URL。
- uses: actions/checkout@v2
with:
token: ${{ secrets.PAT }}
- name: Create a change
run: echo "test" > test.txt
- name: Commit change
run: |
git config --global user.name 'Your Name'
git config --global user.email '[email protected]'
git add -A
git commit -m "Add test file"
git push
根据GitHub论坛上的this comment,必须从admin / org所有者帐户创建PAT。具有写访问权的协作者不足以推送到受保护的分支。