ChatGPT解决这个技术问题 Extra ChatGPT

Visual Studio Code 总是要求提供 Git 凭据

我开始使用 Visual Studio Code,并尝试将我的测试项目保存到 GitHub,但 Visual Studio Code 总是要求我提供 GitHub 凭据。

我已在我的 PC GitHub DesktopGit 中安装。我已经跑了:

 git config --global credential.helper wincred

但 Visual Studio Code 仍然要求提供凭据。

我怎样才能解决这个问题?

这是我位于用户配置文件文件夹中的 .gitconfig 文件:

    [filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = ddieppa
[user]
    email = fake@live.com
[credential]
    helper = wincred

这是询问凭据的弹出窗口:

https://i.stack.imgur.com/l5SIE.png

我在弹出窗口中输入了我的 GitHub 凭据,但在 Visual Studio Code 的 Git 输出窗口中仍然出现此错误:

remote: Anonymous access to ddieppa/LineOfBizApp.git denied.
fatal: Authentication failed for 'https://github.com/ddieppa/LineOfBizApp.git/'
您正在使用哪个 GItHub URL? HTTP 或 GIT (SSH)?如果您使用的是 HTTP URL,则必须在 URL 中包含用户名和密码。您最好使用 GIT URL 并将您的公共 SSH 密钥添加到用户的 SSH 密钥列表中
@yorammi 我是 git 的新手,所以我安装了 Github Desktop 和 Git 并尝试使用 Visual Studio Code 保存我的项目,所以我不知道我在传递什么。我怎么知道?
@ddieppa GitHub Desktop 有一种方法可以通过 https 连接进行两因素身份验证。但是,这会破坏其他工具。就像答案说的那样,您现在需要将源 URL 从 https 更改为 ssh。
几次重新启动也可能会有所帮助。我重新启动计算机 2 次,然后 VS 没有再次要求提供凭据。
为什么用 Visual Studio 标记它? Visual StudioVisual Studio Code 是两个不同的东西。

J
John Veness

为什么 Visual Studio Code 要求输入密码?因为 Visual Studio Code 运行自动提取功能,而 Git 服务器没有任何信息来授权您的身份。它发生在:

您的 Git 存储库有一个 https 远程 URL。是的!这种遥控器绝对每次都会问你。这里没有例外! (您可以像下面的解决方案那样做一个临时技巧来缓存授权,但不建议这样做。)

您的 Git 存储库具有 ssh 远程 URL,但您尚未将 ssh 公钥复制到 Git 服务器上。使用 ssh-keygen 生成您的密钥并将其复制到 Git 服务器。完毕!此解决方案还可以帮助您不再在终端上重新输入密码。在这里查看@Fnatical 的一个很好的说明以获得答案。

此答案末尾的更新部分对您根本没有帮助。 (它实际上让你的工作流程停滞不前。)它只会阻止 Visual Studio Code 中发生的事情,并将这些事情转移到终端。

对不起,如果这个糟糕的答案已经影响了你很长很长时间。

原始答案(坏)

我在 Visual Studio Code document 上找到了解决方案:

提示:您应该设置一个凭证助手,以避免每次 VS Code 与您的 Git 远程对话时都要求您提供凭证。如果您不这样做,您可能需要考虑在 ... 菜单中禁用 Autofetch 以减少您收到的提示数量。

因此,打开凭证助手,以便 Git 将您的密码保存在内存中一段时间。默认情况下,Git 会将您的密码缓存 15 分钟。

在终端中,输入以下内容:

git config --global credential.helper cache
# Set Git to use the credential memory cache

要更改默认密码缓存超时,请输入以下内容:

git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

如果原始答案不起作用

我在上面安装了 Visual Studio Code 和相同的配置,但正如@ddieppa 所说,它对我也不起作用。所以我试图在用户设置中找到一个选项,我看到“git.autofetch”=true,现在设置它为假! Visual Studio Code 不再需要再次重复输入密码!

在菜单文件 → 首选项 → 用户设置中:键入这些:

将您的设置放在此文件中以覆盖默认设置:

{
  "git.autofetch": false
}

我试过了,但对我不起作用,我什至使用这个:$ git config --global credential.helper wincred
虽然自动获取解决方案确实停止了不断弹出的问题,但它仍然需要在每次推送和拉取时输入凭据。如果使用带有 http/s 的 PC,下面的凭据管理器解决方案效果很好。
如果您尚未启动操作,则不应弹出任何内容,尤其是要求凭据的内容-您怎么知道这是安全的而不是恶搞?
请注意该设置!它根本不是为了帮助您记住您的凭据。它正在谈论自动帮助您获取 git-fetch。请查看 atlassian.com/git/tutorials/syncing#git-fetch 以了解更多详细信息。就存储凭据而言,请使用命令 git config --global credential.helper cache。查看 git-scm.com/book/gr/v2/Git-Tools-Credential-Storage 了解更多详情。
建议您关闭自动提取作为“别管我”选项很好。但这类似于说“如果您的软件不起作用,请停止使用它”。人们认识到差异很重要。我建议这个答案的“更新”部分改为“如果那不起作用”,并解释说你可以让它停止打扰你而不实际解决问题。 UPDATE 上面的部分答案实际上是正确的(至少,按照对我有用的文档链接)
P
Peter Mortensen

这一直对我有用:

设置凭证助手存储: git config --global credential.helper store 然后验证是否需要: git config --global credential.helper store

使用从 here 引用的 Git Bash 时的一个简单示例(仅适用于当前存储库,对所有存储库使用 --global):

git config credential.helper store
git push http://example.com/repo.git

Username: < type your username >
Password: < type your password >

[several days later]

git push http://example.com/repo.git

[your credentials are used automatically]

它也适用于 Visual Studio Code。

更详细的示例和高级用法是 here

注意:用户名和密码未加密并以纯文本格式存储,因此只能在您的个人计算机上使用。


我不知道为什么这个缓存不想在 ubuntu 18.04 和 vs 代码上为我工作。 store 做到了。
很不安全。改用缓存。如果您的“个人”计算机被黑客入侵,您的 git 凭据也可能被黑客入侵。
缓存将凭证保存在内存中,这不是一个长期的解决方案。您不必每次都输入用户名和密码,但仍然需要经常输入。
我最喜欢这个答案。每次我使用 VS Code 将代码推送到源(即 GitLab)时,我都不想被提示输入用户名/密码
我仍然认为这种方法是不安全的。凭据存储在 ` ~/.git-credentials` 文件中,当系统受到威胁时可能会被滥用。最好将 https 更改为 ssh 并使用 ssh 密钥作为替代方案。
P
Peter Mortensen

您应该能够像这样设置您的凭据:

git remote set-url origin https://<USERNAME>:<PASSWORD>@bitbucket.org/path/to/repo.git

您可以像这样获取远程 URL:

git config --get remote.origin.url

如果我的密码中有@,那么网址是什么?
在 .git\config 文件中。
另请注意, 是可选的,如果您不想将密码保存到本地磁盘并希望继续收到提示。
您还可以提供个人访问令牌以用于您的密码,这样您就不会暴露您的真实帐户密码可能以明文形式存储。如果您愿意,或者您认为您的系统丢失或受损,您也可以轻松删除该条款。
@Suvonkar,您可以在密码中使用 %40 而不是 @。
P
Peter Mortensen

我所要做的就是运行这个命令:

git config --global credential.helper wincred

然后我被提示输入密码两次。

下次它在没有提示我输入密码的情况下工作。


谢谢!问题解决了,this one too
在 Ubuntu 上,使用 store 而不是 wincred
这对我有用!您也可以使用 git config --global credential.helper 'cache --timeout==1209600' 使其持续 2 周,而不是默认的 15 分钟。来源:help.github.com/en/github/using-git/…
^ 有关更多信息,请参见此处:git-scm.com/docs/gitcredentials git-scm.com/docs/git-credential-cache git-scm.com/docs/git-credential-store store 将其永久存储在磁盘上。另外,我之前的评论有一个错误:不要使用==,使用=。编辑太晚了。
请指定此解决方案仅适用于 Windows。
P
Peter Mortensen

通常,您可以使用内置的凭证存储设施:

git config --global credential.helper store

或者,如果您使用的是 Windows,则可以使用他们的凭据系统:

git config --global credential.helper wincred

或者,如果您使用的是 macOS,则可以使用他们的凭证系统:

git config --global credential.helper osxkeychain

在大多数情况下,第一个解决方案是最佳的。


P
Peter Mortensen

以下步骤将引导您完成如何:

生成 SSH 密钥(无密码**) 将步骤 1 中生成的公钥添加到您的 Git 存储库 确认上述步骤已成功完成 进行第一次提交(无需提供用户名/密码)

**如果您的工作特别敏感,那么在没有密码的情况下生成 SSH 密钥是不明智的。

操作系统 - Fedora 28 | 编辑器 - Visual Studio Code v1.23.0 | 存储库 - Git

生成 SSH 密钥:

ssh-keygen -t rsa -C "email@goeshere.com"

输入保存密钥的文件:按 Enter

输入密码:按 Enter

再次输入相同的密码:按 Enter

完成上述步骤后,您的公钥的位置将显示在终端窗口中。如果当前登录的用户是“bob”,那么您的公钥的位置将是 /home/bob/.ssh/id_rsa.pub

将公钥复制并导入到 GitHub:

猫 /home/bob/.ssh/id_rsa.pub

将现在显示在终端窗口中的整个公钥复制到剪贴板

转到 https://github.com 并登录

单击屏幕右上角的用户图标,然后选择设置

单击 SSH 和 GPG 密钥

单击新建 SSH 密钥

输入标题,将复制到剪贴板的公钥粘贴到第一个项目符号中,然后单击添加 SSH 密钥

确认以上步骤:

ssh -T git@github.com

是的

你好 !您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。

第一次提交/推送,无需输入用户名/密码:

触摸测试.txt

git add test.txt

git commit - 打开编辑器,输入消息并保存文件。如果 vi 是您的编辑器,请在文件打开后按 I,输入消息,按 Esc,然后输入 :x 以保存更改。

git 推送

您可能遇到的唯一问题是当您尝试 SSH 到 GitHub 时。此链接将提供一些帮助 -

错误:代理承认未能签名

狩猎愉快!


P
Peter Mortensen

尝试安装“Git Credential Manager For Windows”(并按照设置 credential manager 的说明进行操作)。

在使用 Git 的应用程序(例如,Visual Studio Code)中需要时,它将“magically”打开 Visual Studio Team Services 凭据输入所需的对话框。


我也希望有一个“Linux 的 Git 凭证管理器”。哦,等等,我已经在运行 ssh-agent。但是 VS Code 在 Linux 上似乎忽略了这一点。
这对我来说是最简单的解决方案。效果很好!感谢您指出了这一点
感谢上帝的回答……唯一有效的方法。祝福你。
P
Peter Mortensen

使用 SSH 而不是 HTTP 或 HTTPS。

您需要在本地机器上设置 SSH 密钥,将它们上传到您的 Git 服务器并将 URL 形式 http:// 替换为 git://,您将不再需要使用密码。

如果您不能使用 ssh,请将其添加到您的配置中:

[credential "https://example.com"]
    username = me

文档是 here

在 GitHub 中使用 SSH 密钥

只需按照以下步骤操作,您将立即设置 SSH 密钥:

生成一个新的 SSH 密钥(如果您已有密钥,则跳过此步骤) ssh-keygen -t rsa -C "your@email"

在 home/.ssh 目录(或 Windows 下的 Users/.ssh)中设置密钥后,打开它并复制内容

如何将 SSH 密钥添加到 GitHub 帐户?

登录 GitHub 帐户

点击右上角的rancher(设置)GitHub账号设置http://git-scm.com/docs/gitcredentials

单击 SSH 密钥

单击添加 ssh 密钥

粘贴您的密钥并保存

你们都准备好了:-)


您还应该明确根本原因是什么。就我而言,由于我启用了两因素身份验证,因此 SSH 是连接到 repos 的唯一方法。任何 https 连接都会导致这样的提示。
@codeWizard 我不记得到底发生了什么,但 VS Code 工作正常,我的意思是无需任何额外配置即可连接到 GitHub 存储库,我想问题可能是我在 Github Desktop 之后安装了 Git,这可能吗?
VC 可能会在内部存储其凭据,一旦您重新安装/升级 git,配置可能已更改。我不是 VC 用户,我是 UNIX 人,所以我无法在我的机器上测试它。
@codeWizard VS Code 是开源和多平台的,您可以在 Windows、MacOS 或 Linux 上运行它:),使用 ssh 变体,看看我得到了什么
文档链接已损坏。
M
Mark

自动 Git 身份验证。从 v1.45 Release Notes 开始:

GitHub 存储库的 GitHub 身份验证 VS Code 现在具有针对 GitHub 存储库的自动 GitHub 身份验证。现在,您无需在系统中配置任何凭证管理器即可克隆、拉取、推送到公共和私有存储库以及从这些存储库中推送。即使是在集成终端中调用的 Git 命令,例如 git push,现在也会自动针对您的 GitHub 帐户进行身份验证。您可以使用 git.githubAuthentication 设置禁用 GitHub 身份验证。您还可以使用 git.terminalAuthentication 设置禁用终端身份验证集成。


伟大的!在 Linux(Ubuntu 18.04 + KDE Plasma)上禁用这两个设置可修复凭据处理。这两个启用覆盖了我的 .gitconfig 中的 askpass = /usr/bin/ksshaskpass,因此我每次都被询问用户名和密码。随着 1.45 版角色在更多机器上的推出,这可能会得到更多人的支持。
P
Peter Mortensen

对于 Windows 10:转到控制面板 → 凭据管理器 → Windows 凭据 → 单击 Git 链接,→ 编辑 → 更新到新密码。那应该行得通。


啊哈!另一种情况是过期/重置密码导致神秘问题和用户浪费半天时间。谢谢!
P
Peter Mortensen

Ubuntu 用户只需在 Visual Studio Code 的终端中输入以下命令:

git config --global credential.helper store

现在,输入一次您的用户名和密码,之后就不会再询问您了。

笔记:

用户名和密码未加密并以纯文本格式存储,因此请谨慎使用。但是,如果您的密码包含一些特殊字符,如@、#、&、* 等,那么这些字符将被加密。

此外,您可以在家中找到您的“.git-credentials”文件。它是隐藏的,因此请确保启用隐藏文件。

位置:~/.git-credentials


P
Peter Mortensen

我在 Visual Studio Code 和 Ubuntu 20.04(Focal Fossa)上运行了它:

它自动解决了定期询问凭据问题:

git config --global credential.helper store

a
adampfoster

使用不带密码的 SSH 密钥。

也许这对某些人来说是显而易见的(对我来说不是)。如果您绝对需要密码,它也不能解决问题,但在我在 Mac 上的情况下,这是一个不错的折衷方案。


P
Peter Mortensen

在与这样的事情斗争了一会儿之后,我想我想出了一个很好的解决方案,尤其是当在 GitHub 和 Bitbucket 上拥有多个帐户时。但是对于 Visual Studio Code,它最终从 Git Bash 终端启动它,以便它从 bash 会话继承环境变量并且它知道要查看哪个 ssh-agent。

我仍然很难找到一个地方来获取我需要的信息。另外,自 2017 年以来,ssh-agent 能够仅在您尝试访问存储库时提示您输入密码。

如果有人感兴趣,我会将我的发现记录在 here 中。


P
Peter Mortensen

我通常运行这个简单的命令来将 Git 远程 URL 从 HTTPS 更改为 SSH:

git remote set-url origin git@github.com:username/repo-name-here.git

P
Peter Mortensen

这就是我在计算机上解决问题的方法:

打开 Visual Studio Code 转到菜单 File → Preferences → Settings 在 User 选项卡下,展开 Extensions 并在右侧窗格中选择 Git Find Autofetch 并取消选中它


那应该如何工作?什么是操作理论?为什么这会阻止 Git 请求凭据?
P
Peter Mortensen

this article 之后:

您可以将 GIT_SSH 环境变量设置为 PuTTY 的 plink.exe 程序。

(然后使用 pageant.exe 程序作为身份验证代理。)


P
Peter Mortensen

我设法通过执行以下步骤来阻止这种情况。

卸载 GitHub Desktop(我不确定这是否必要) 卸载凭据管理器:cd "C:\Program Files\Git\mingw64\libexec\git-core" 后跟 git-credential-manager.exe 卸载重置凭据帮助程序以使用wincred: git config --global credential.helper wincred 使用 Visual Studio Code 推送一些更改并重新输入凭据。

注意:我使用个人访问令牌作为密码。


我的问题仅通过第 2 步解决。所有其他答案都不适用于我的情况。
在 Windows 上,大概?
P
Peter Mortensen

通过以下步骤解决问题。

卸载软件 Visual Studio Code 和 Git 并重新安装。将 Git 存储库克隆 URL 从 SSH 更改为 HTTPS。


P
Peter Mortensen

我在 Visual Studio Code 中遇到了类似的问题。

我通过将远程 URL 更改为 https(在文件 .git/config 中)来解决它:

[remote "origin"]
    url = https://user@server.com/plesk-git/project.git

并且:

git config --global credential.helper wincred

我再次拉动,弹出了 Windows 凭据,问题就解决了。


P
Peter Mortensen

相反的问题,但相关:

在我的情况下,即使缓存帮助程序超时已经过期,我也在努力使用 Visual Studio Code 集成终端不要忘记输入的密码。

不过,外部终端会话工作正常。

我发现 Visual Studio Code 中恰好有一个选项,它允许您在实际的 Git 插件之上设置一个可选缓存,这不允许发生预期的行为。

https://i.stack.imgur.com/Fxszg.png

检查后,我的密码在缓存超时时被遗忘,因此我可以毫不费力地开始从个人帐户跳转到工作帐户:)

在 Linux 和 Visual Studio Code 1.58.2 上。


P
Peter Mortensen

您可以参考此链接来设置 Git credential

您可以运行以下命令来保存您的 Git 凭据。您无需在每次运行 Git 命令时都输入用户名和密码(适用于 Windows):

git config --global credential.helper wincred

对于 Mac / Linux,请参阅 Git Credential Manager for Mac and Linux 了解如何保存 Git 凭据。


P
Peter Mortensen

对我来说,我已经使用 SSH 密钥设置了我的远程存储库,但 Git 找不到它们,因为 HOMEDRIVE 环境变量由于我公司的域策略而自动设置为网络共享。在启动 code . 之前在我的 shell 中更改该环境变量会导致 Visual Studio Code 继承正确的环境变量,并且在 Git 输出窗口中不再出现连接错误。

现在我只需要弄清楚如何覆盖域策略,因此 HOMEDRIVE 始终指向我的本地 c:\users\marvhen 目录,这是 .ssh 目录的默认位置。


P
Peter Mortensen

我以简单的方式解决了类似的问题:

转到 CMD 或终端类型 git pull origin master。将 'origin' 替换为您的远程名称它将要求提供凭据。键入它。

就这样。我解决了这个问题。


P
Peter Mortensen

对于 Windows 10:

按窗口键。

键入 cred,您应该会在控制面板中看到“凭据管理器”

单击以打开,然后删除相关的缓存凭据。然后再试一次。它将要求输入用户 ID 和密码。输入正确的密码,你会很好。

当我更改我的网络密码时,它发生在我身上。


P
Peter Mortensen

打开 Visual Studio Code 的用户必须是执行 Git 命令的同一用户。然后在终端中,运行以下命令。

git config --global credential.helper store
git pull

在下一个推送或拉取操作中,您不会看到它要求提供 Git 凭据。


您提供的答案与其他人的答案相同,但效率不高。
P
Peter Mortensen

如果您使用的是 Windows PC,请安装 Git for Windows。而已!


我尝试了很多其他的东西,这对我有用。在我的情况下,重新安装。
P
Peter Mortensen

除了添加上面的 SSH 配置条目

如果 Windows

Set-Service ssh-agent -StartupType Automatic

在 PowerShell 中。

现在 Visual Studio Code 不应提示...