我使用用户名密码来推送我的代码。它工作了几个月,但突然我不能这样做,并得到这个错误:
Username for 'https://github.com': shreyas-jadhav
Password for 'https://shreyas-jadhav@github.com':
remote: Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead.
remote: Please see https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/ for more information.
请注意,这个链接没有任何帮助。即使使用生成的令牌也无济于事。
主持人注:这是GitHub计划的一部分,很快将是永久的服务变化
GitHub已禁用密码认证,且不再支持密码认证。创建并使用个人访问令牌(PAT)而不是密码。
以下步骤:
Remove GitHub stored credentials from the keychain. (For example, using "Keychain Access" on Mac, or "Credential Manager" on Windows)
Generate access-token from GitHub
Settings → Developer Settings → Personal access tokens → Generate new token
Save the token - as it will be available there for once only
Run command git fetch (or git push, if fetching doesn't require permissions)
If on Windows, you must run this from PowerShell, not the command prompt (CMD). The command prompt consistently fails with the remote: Password authentication is temporarily disabled message, despite identical inputs.
It will ask for your user name and password.
If it does not ask you for your username and password, you must change your Git remote URL to contain your username: https://USERNAME@github.com/repo-owner/repo-name.git (see approach 2 for instructions on changing remote URL)
Use the access token instead of the password when it asks for a password (you will have to enter it twice)
或者第二种方法:
从GitHub生成访问令牌:
设置→开发人员设置→个人访问令牌→生成新的令牌
在本地更新origin的URL: git remote set-url origin https://<token>@<git_url>.git
拉一次:git拉https://<token>@<git_url>.git
适用于macOS, Windows和Linux
解决方案1
删除现有的存储库(如果当前有任何更改,请对其进行备份):
Mv my-repo my-repo.backup
创建SSH密钥并将其添加到GitHub(参见GitHub文档)
为SSH克隆存储库:git克隆git@github.com:group/repo-name.git
方案二(推荐方案)
Git远程删除原点
您必须添加一个访问令牌(请参阅GitHub文档以生成令牌)
Git远程添加origin https://<token>@<git_url>.git
Git拉https://<token>@<git_url>.git
使用Visual Studio代码
删除你的GitHub访问:
git credential-osxkeychain erase
⏎ host=github.com
⏎ protocol=https
不是推就是拉
它将提示您一个模态对话框。单击“允许”并按照流程操作。
Ubuntu服务器和现有Git存储库的解决方案
删除密码:
git config --global --unset user.password;
git config --local --unset user.password;
改变remote.origin.url。用你的GitHub用户名替换<用户名>:
git config --global --replace-all remote.origin.url "https://<username>@github.com/PPEProjects/smile-eyes-be.git";
git config --local --replace-all remote.origin.url "https://<username>@github.com/PPEProjects/smile-eyes-be.git"
拉/ push
git pull
git push origin HEAD:develop
输入从个人访问令牌生成的个人访问令牌。
之前接受的Kusal Shrestha的答案可以完成这项工作,但它并不安全,因为我们将令牌存储在纯文本中。
在我看来,将它存储在钥匙链中是更好的方法。
对于Visual Studio Code,请阅读crg的回答。
Windows:
你可以试试下面的@Venryx评论,但我还没有测试过。
Mac:
我现在才面对这个问题
按照建议,我按照这个URL进入开发设置并生成了一个令牌。
然后我进入我的Mac的钥匙链访问:
我删除了(所有)行的GitHub
现在我去终端输入了虚拟代码
git push
终端要求我输入我的邮箱和密码。
我输入了我的电子邮件,对于密码,我输入了我之前生成的令牌。
然后它又开始工作了。
首先从帖子:API和Git操作的令牌认证要求,它说
2021年年中-所有经过身份验证的Git操作都需要个人访问或OAuth令牌。
所以你需要使用个人访问令牌(PAT)来推送:
1获取您的个人访问令牌
在这里登录以访问存储库并添加一个新的个人访问令牌:个人访问令牌。生成一个并保持令牌的安全(离开后无法显示它)。
(在Android Studio中,您需要获得“repo”,“gist”和“read:org”的许可)
2使用个人访问令牌进行推送
在你得到令牌后,你可以用如下命令进行推送:
git push https://[personal access token]@github.com/[user name]/[repository Name].git
您可以通过GitHub仪表板生成您的PAT(个人访问令牌)。
Step 1: Log in to your GitHub account.
Step 2: In the upper-right corner of any page, click your profile photo, then click Settings.
Step 3: In the left sidebar, click Developer settings.
Step 4: In the left sidebar, click Personal access tokens.
Step 5: Click Generate new token.
Step 6: Give your token a descriptive name.
Step 7: Select the scopes, or permissions. You'd like to grant this token. To use your token to access repositories from the command line,
select repo.
Step 8: Click Generate token.
复制您的令牌到一个安全的位置,因为一旦您离开该页面,您将无法检索它,除非您创建一个新的。
这里有一个简单的解决方案:
进入GitHub→设置→开发者设置→个人访问令牌。重新生成令牌并复制它。
在任何本地存储库上,当git推送时,输入您的用户名,密码是生成的令牌
无需为每个HTTPS Git操作手动输入令牌,您可以使用Git客户端缓存令牌。
在终端中输入如下命令:
# Set Git to use the credential memory cache
git config --global credential.helper cache
输入如下命令修改默认密码缓存超时时间。
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'