无法通过 Github Action 提交和推送更改(用户无效)

11

在我的操作工作流程的最后一步,我添加了以下步骤。当代码推送到主分支时运行此步骤,其想法是在此操作完成后将由 Github 操作更改的所有文件提交回主分支。

    - name: Commit and push changes
      run: |
        git config --global user.name 'myGithubUserName'
        git config --global user.email 'myEmail@gmail.com'
        git add -A
        git commit -m "Increased build number [skip ci]"
        git push -u origin HEAD

尽管我已经配置了用户和电子邮件,但仍然遇到以下错误:

致命错误:无法读取“https://github.com”的用户名:设备未配置

[错误]进程以退出代码128完成。

请注意,这在macOS-latest上运行,并使用预装的git。

1个回答

13

actions/checkout@v2

版本2的checkout解决了分离HEAD状态问题并简化了推送到源的流程。

name: Push commit
on: push
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-username@users.noreply.github.com'
          git commit -am "Automated report"
          git push

如果需要推送事件触发其他工作流,请使用具有repo作用域的个人访问令牌

      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.PAT }}

actions / checkout@v1 (原答案)

问题在于 actions / checkout @ v1 操作会使git存储库处于分离的HEAD状态。 有关更详细信息,请参见此问题的链接

我成功使用的解决方法是设置远程如下:

git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/username/repository

您可能还需要进行结账。您可以从 GITHUB_REF 中提取分支名称:

git checkout "${GITHUB_REF:11}"

这里是一个完整的例子,用以演示。

name: Push commit example
on: push
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-username@users.noreply.github.com'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
          git checkout "${GITHUB_REF:11}"
          git commit -am "Automated report"
          git push

顺便说一下,我编写了一个GitHub动作,可以帮助你实现你想要做的事情。它将在工作流期间本地所做的任何更改提交到新分支并提出拉取请求。 https://github.com/peter-evans/create-pull-request

此外,请参阅此相关问题和答案。从GitHub动作推送到源


嗯,我在git add -A步骤前添加了这行代码,并将/username/repository更改为我的存储库名称,但仍然出现错误,尽管现在是另一种错误:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/MyOrg/MyRepo/'。谢谢你分享你的操作,我会仔细研究它。 - Ilja
我更新了帖子,直接使用密钥而不是从环境变量中获取。这样有帮助吗? - peterevans
@Samira 我认为这并非所有情况下都是正确的。我需要在 GitHub Action 中克隆一个私有仓库,在没有 x-access-token: 部分的情况下失败了。 - ConorSheehan1
1
@con-- 哈哈。已经有一段时间没有使用远程URL编辑了,但现在不应该再需要了,因为您可以在现在使用token参数运行actions/checkout。在等待v2的过程中,我正在使用带有token参数的actions/checkout@e8bd1dffb6451bb0d84dbcd3ed059daca1371180,并且它可以很好地推送而不需要触及任何远程设置...至少在公共存储库上(没有任何需要自动提交以确认其是否适用于私人存储库)。 - Samira
@Samira,我刚刚使用了从 Checkout 得到的那个版本,并且能够完成提交和推送,谢谢。但是我不知道为什么不能像 peterevans 写的那样使用 v2 版本。此外,我正在处理 pull_request。 - Alberto Rojas
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接