如何解决在git push时出现的“拒绝允许OAuth应用创建或更新工作流程”的问题

216

如何授权workflow范围,以允许OAuth应用程序在git push时创建或更新工作流.github/workflows/cd.yml,而不是拒绝它。


你是如何创建用于推送的令牌的?你是如何创建 OAuth 应用程序的?OAuth 应用程序在请求令牌的作用域时是否请求了“workflow”作用域?我们需要更多关于发生了什么以及如何设置的详细信息,才能为您提供有用的答案。 - bk2204
@bk2204 我使用了 https github 克隆。 - Ara Yeressian
19个回答

295

当我尝试使用IntelliJ推送到包含GitHub Action工作流程(YAML文件在 .github/workflows 中)的分支时,我刚刚遇到了这个问题。我没有在互联网上找到有用的现有资源,所以我希望这也能帮助您解决它。

简而言之:在GitHub中使用具有workflow范围的个人访问令牌更新或创建一个新的,并配置应用程序使用该令牌。

背景:具有GitHub集成的第三方工具,如IntelliJ、Visual Studio Code、Github Desktop等,使用令牌连接到您的GitHub帐户,以便可以代表您拉取/推送等。在IntelliJ的情况下,他们的说明只说要包括repogistread:org范围。但是,您需要workflow范围来修改GitHub Actions。

以下是修复方法:

  1. 在您的Github帐户中,转到设置(在右上角的头像下拉菜单中)
  2. 进入Developer Settings > Personal Access Tokens
  3. 如果列出了您的令牌,请更新它以包括workflow范围:
    • 单击令牌名称。
    • 选择workflow范围并保存。
    • 如果您使用的应用程序不会自动重新获取令牌的权限,则可能需要创建一个新令牌(请参见下面的步骤4)。
  4. 点击更新令牌以保存更改。完成!
  5. 如果没有列出令牌,请生成一个新的令牌:
    • 点击生成令牌
    • 选择您需要的范围,包括workflow
    • 仔细阅读信息,然后单击“确定”继续。
    • 复制Github向您显示的新令牌。
    • 将新令牌应用于您的应用程序。例如,对于Intellij IDE,转到设置 > 版本控制 > GitHub,删除现有的集成并重新添加它,粘贴新令牌。

47
你可以编辑当前的个人访问令牌,将 workflow 加入其中以更改其范围。这正是我刚刚为解决问题所做的。 - gonadarian
1
@Xanlantos 我想这是因为当您最初创建令牌时,“工作流程”这个东西还不存在。 - endolith
1
@gondadarian。是的!谢谢你。更新现有用户个人访问令牌并将workflow添加到其中是解决此问题最无缝和最简单的方法。非常感谢您分享! - Clever Programmer
1
您需要使用新的令牌重新创建应用程序与Github的集成,以使更改生效。如何操作? - ScottyBlades
1
似乎重新生成令牌是不必要的。这可以避免一些麻烦。 - A Mehmeto
显示剩余7条评论

67
运行macOS。我正在从我的文本编辑器推送我的.yml工作流文件。
  1. 前往github个人访问令牌设置并生成一个新的令牌。确保选择repo和workflow访问范围。

2

打开Mac上的钥匙串访问应用程序,并搜索github。我找到了一个名为github.com的条目(如下所示),属于Internet password类型,之前填充了一个看似随机的令牌。用步骤1生成的令牌(以ghp_开头的令牌)替换密码条目。

3


@eden 很高兴能够帮到你! - Diego
密码应该在哪里输入? - toan
双击条目,弹出一个窗口,然后在窗口中单击“显示密码”以进行编辑。 - Diego

54

对于Windows 10:转到 设置 -> 凭据管理器 -> Windows凭据 -> 删除github.com凭据 -> 从git-bash控制台中执行git pull/push您的GitHub项目 -> 在IDE/源代码控制中重新连接GitHub帐户。

你不需要使用“workflow”创建个人访问令牌,也不需要创建秘密GITHUB_TOKEN(它会自动创建且不能手动创建)。


5
对我来说,这意味着删除所有与Github相关的凭据,然后注销并重新登录Github桌面应用程序。但是你的回答也非常接近! - Robin
4
解决了!我在我的 Windows 凭据中删除了所有对 Github 的引用。当我再次 git push 时,它强制进行浏览器登录,然后一切都正常了! - Rocky Kev
这在过去两周内已经发生了两次。不确定原因。但是这个答案解决了问题。 - Mark Brown
我在将自定义操作添加到Firebase Hosting存储库后遇到了这个问题。对于我来说,我是在Windows上安装的git desktop;但我同时从命令行和vscode中进行推送。进入GitHub桌面客户端并重新登录就可以解决问题了。 - toddwseattle
对我有用!我重新通过浏览器进行了身份验证,现在它可以工作了,只是希望没有删除其他正常工作的应用程序中的太多内容。 - Vincenzooo
这对我有用。在Windows凭据管理器中删除了所有与GitHub相关的凭据,并在Sourcetree中重新推送。它提示我在浏览器中重新登录,然后它就可以工作了。 - Alexander

29

这个问题是由于您的当前令牌不被允许在Github上使用工作流引起的。 按照以下步骤进行修复:

对于在MacOS上使用Android Studio的人:

  1. 删除您当前的令牌(首选项 -> 版本控制 -> GitHub): 输入图像描述

记得点击“确定”按钮。

  1. 再次尝试从Android Studio推送/拉取,现在会出现一个弹出窗口。 输入图像描述

  2. 点击“使用令牌”按钮,另一个弹出窗口将会出现。 输入图像描述

  3. 点击“生成”,您将被发送到GitHub网站以生成一个新的令牌。记得选择工作流权限。 输入图像描述

  4. 点击生成按钮以获取新的令牌并将其粘贴到第3步中的Android Studio。现在一切都设置好了。


3
感谢您制作图形的努力!非常容易理解,问题已得到解决。 - Anthony Holland

19
在Windows 10上,以下是我解决这个问题的步骤: 我包含了很多截图,因为这个问题比预期的要难解决得多。 回过头来看,@CSRedRat所说的是正确的,但当我遇到问题时,由于答案过于简洁,我无法理解。 最终,这篇文章让我更清楚地了解了情况。 问题在于:虽然你可以使用GitHub开发者设置菜单解决此问题,生成新令牌,然后将其粘贴到Windows凭据管理器中,但你不应该这样做,因为最终该令牌将过期,然后你将再次遇到此问题,因为没有任何东西知道如何刷新令牌,因为你手动设置了它。 相反,应通过Git for Windows解决这个令牌权限问题。旧版的Git Credential Manager for Windows没有请求创建或更新工作流程的权限,但现在你需要这些权限。好消息是,有一个新版本叫做Git Credential Manager Core,它会请求这些权限和更多权限。 新的凭据管理器随Git 2.28及更高版本一起发布,但默认情况下未启用。如果你已经安装了此版本或更高版本的Git for Window,则已经拥有了该软件。在我的情况下,我有版本2.30.2,所以我已经有了新软件。

enter image description here

但它仍在使用我旧的Git for Windows凭据,这些凭据没有所需的特权。你的情况可能也是如此,或者如果你没有2.28版本以下的旧版本,则需要先安装新版本。无论哪种方式,一旦你的计算机上有足够新的Git for Windows版本,下一步就是通过在Windows搜索框中键入“Windows凭据管理器”来删除旧凭证。

enter image description here

然后找到每个git凭证,点击它,并点击删除按钮。

enter image description here

现在,下次您尝试从git bash、Visual Studio或任何您使用的git客户端访问您的get账户时,您将被提示输入新凭据,因为旧凭据已失效。请点击下面对话框中的使用浏览器登录按钮:

enter image description here

接下来你会看到一个类似下面这张网页的页面,如果你展开工作流下拉菜单,你会发现它正在询问你这次需要的权限。然后点击授权按钮。

enter image description here

一旦你这样做了,你会看到一个页面,用于输入你的github密码:

enter image description here

现在,您的Windows凭据管理器中有一个新的凭据,具有您需要的特权,您以前失败的操作现在将成功。是的!

不适用于Sourcetree 3.3.4 Windows 11 22H2。 - huang
太棒了,工作得很顺利,谢谢!只是一个小提示,可能只需要将密码更改为新生成的具有工作流权限的 GitHub 令牌就足够了。 - undefined

16
在我的情况下,我在macOS钥匙串中有过期的GitHub凭据。我正在修改工作流文件并从命令行推送更改,因此我根本没有考虑检查钥匙串。 更新macOS 钥匙串中的凭据 解释了如何使用git credential-osxkeychain来清除钥匙串:
$ git credential-osxkeychain erase
host=github.com
protocol=https
> [Press Return]

然后我不得不再次输入用户名和密码。这一次我生成了一个新的个人访问令牌,并使用该令牌作为密码。之后,我终于可以推送工作流程更改。


谢谢!在Android Studio中从keychain中删除凭据并重新添加令牌对我有用! - raquezha
太棒了,谢谢! - jonathasborges1

10
这个错误是在使用Github CLI配置本地环境时出现的。目前并不清楚需要更新哪些权限。但是,在CLI的情况下,您可以运行以下命令来启用它,然后继续进行。 gh auth login --scopes workflow

1
当我尝试将包含工作流程的本地仓库推送到一个新的裸 GitHub 仓库时,我收到了这个错误。这个解决方案为我解决了问题。 - skst

9

6

通过使用 桌面版Github应用程序 推送更改(它似乎具有完全权限,而不是vs code的有限范围),我解决了这个问题。

在成功推送修改后的工作流文件的一个提交之后,我能够再次正常地使用vs code 进行推送提交。


1
这对我有用。有没有一种方法可以修改 VS Code 的权限? - cy23
还没有研究过,但是检查一下应该是个好主意。 - Aerodynamic

4

在将我第一次提交的 nbdev 项目推送后,我遇到了同样的问题。以下是解决方法:

  1. 删除 .github/workflows 下的所有 .yaml 文件
  2. git add .git commit -m "CommitMessage"git push
  3. 直接在 GitHub 上添加 .yaml 文件(在 Actions 选项卡下,然后选择 New workflow
  4. git pull

然后您可以继续在本地仓库上工作,并且应该能够将更改推送到 Github,而不会出现任何错误消息。


Function Declaration: 函数声明 - rennf93

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