Visual Studio Code总是要求git凭据


218

我开始使用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

这是要求提供凭据的弹出窗口:

在此处输入图片说明

我在弹出窗口中输入我的GitHub凭据,但仍在Visual Studio CodeGit输出窗口中收到此错误:

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

@yorammi我是git的新手,所以我安装了Github Desktop和Git,并尝试使用Visual Studio Code保存我的项目,所以我不知道我要传递的内容。我怎么知道
ddieppa 2015年

@ddieppa GitHub Desktop具有一种通过https连接进行两因素身份验证的方法。但是,这破坏了其他工具。就像答案说的那样,您现在需要将原始URL从https更改为ssh。
莱克斯李

Answers:


157

上次更新时间:2019年3月5日

在98次投票之后,我想我需要给出一个正确的答案。

为什么VS代码要求输入密码?由于VSCode运行自动获取功能,因此git服务器没有任何信息可以授权您的身份。它发生在以下情况:

  • 您的git repo具有https远程URL。是! 这种遥控器绝对会每次都问您。这里没有例外!(您可以做一个临时技巧来缓存授权,如下所示,但是不建议这样做。)
  • 您的git repo具有ssl远程URL,但是您尚未将ssh公钥复制到git服务器。使用ssh-keygen生成的密钥,并将其复制到服务器的Git。做完了!该解决方案还可以帮助您不再在终端上再次输入密码。见@Fnatical一个很好的指导这里的答案。

此答案末尾的更新部分并没有真正帮助您。(它实际上使您停滞了工作流程。)它仅停止VSCode中发生的事情,并将这些情况移至终端。

很抱歉,如果这个不好的答案影响了您很长时间。

-

原始答案(错误)

我在VSCode文档上找到了解决方案:

提示:您应该设置一个凭证助手,以免每次VS Code与您的Git遥控器通话时都被要求提供凭证。如果您不这样做,则可能要考虑在...菜单中禁用自动提取以减少收到的提示数量。

因此,打开凭据助手,以便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)

更新(如果原始答案无效)

我在上面安装了VS Code和config,但正如@ddieppa所说,它对我也不起作用。因此,我尝试在“用户设置”中找到一个选项,然后看到“ git.autofetch” = true,现在将其设置为false!不再需要VS Code再次输入密码!

在菜单中,单击文件/首选项/用户设置,然后输入以下内容:

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

{
  "git.autofetch": false
}

2
我试过了,但是对我没用,我什至使用了它:$ git config --global credential.helper wincred
ddieppa

尽管自动提取解决方案确实解决了不断出现的弹出问题,但仍然需要在每次推入和拉出时输入凭据。如果将PC与http / s一起使用,则下面的凭据管理器解决方案效果很好。
ruttopia

3
如果您尚未启动该操作,则不会弹出任何东西,尤其是要求提供凭据的东西-您怎么知道这是安全的而不是欺骗?
安东尼·约翰斯顿

7
请注意该设置!这并不意味着完全可以帮助您记住您的凭据。它正在谈论自动帮助您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了解更多详细信息。
感激

7
建议您关闭自动获取功能,将其作为“让我一个人呆”选项即可。但这就像说“如果您的软件不起作用,请停止使用它”。人们意识到差异很重要。我建议该答案的“更新”部分改为“如果不起作用”,并说明您可以使它停止困扰您而无需实际解决问题。上面UPDATE答案的一部分实际上是正确的(至少,按照文档链接为我工作)
Don

66

您应该可以这样设置凭据:

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

您可以这样获取远程URL:

git config --get remote.origin.url


5
如果我在密码中输入@,那么网址是什么?
Suvonkar '17

这是非常好的方法。但是,一个问题是,这些凭据在本地文件系统中保存在哪里?
Teoman shipahi

1
在.git \ config文件中。
yohosuff

还请注意,<PASSWORD>是可选的,如果您不想将密码保存到本地磁盘并希望继续提示输入密码。
Ben Barreth

您还可以提供个人访问令牌以用作密码,这样就不会暴露以明文形式存储的真实帐户密码。此外,如果您愿意,或者您认为系统丢失或受到破坏,则可以轻松删除该配置。
CTS_AE

55

这对我来说一直有效:
1.将凭据hepler设置为存储
$ git config --global credential.helper store
2.然后验证是否要:
$ git config --global credential.helper store

使用此处引用的git bash的简单示例(仅适用于当前仓库,--global适用于所有仓库)

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: < type your username >
Password: < type your password >

[几天后]
$ git push http://example.com/repo.git
[您的凭据将自动使用]

也将适用于VS Code。

更详细的例子和先进的使用在这里

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


2
我不知道为什么这个缓存就不能在ubuntu 18.04和vs代码上为我工作。store做到了。
D. Dan,

1
非常不安全。使用缓存代替。如果您的“个人”计算机被黑,您的git凭据也可能会被黑..
Hypersoft Systems

1
缓存将凭据保存在内存中,这不是一个长期的解决方案。您不必每次都输入用户名和密码,但仍然需要经常输入。
维巴哈·维沙尔

1
我最喜欢这个答案。我不希望每次我把我的代码使用VS代码的来源(即GitLab)时被提示输入用户名/密码
肖恩·麦卡锡

我仍然认为这种方法是不安全的。凭据存储在〜/ .git-credentials文件中,当系统受到威胁时,这些文件可能会被滥用。最好更改httpssshssh键并使用它作为替代。
Mohith7548

21

以下步骤指导您完成以下操作:

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

**如果您的工作特别敏感,则生成没有密码短语的SSH密钥是不明智的。

操作系统 -Fedora 28 | 编辑器 -VS 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:

  • cat /home/bob/.ssh/id_rsa.pub

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

  • 转到https://github.com并登录
  • 点击屏幕右上角的用户图标,然后选择设置
  • 点击SSH和GPG密钥
  • 点击新建SSH密钥
  • 输入标题,将复制到剪贴板的公共密钥粘贴到第一个项目符号点,然后单击添加SSH密钥

确认以上步骤:

  • ssh -T git@github.com

  • yes

  • 嗨!您已经成功通过身份验证,但是GitHub不提供Shell访问。

首次提交/推送而无需输入用户名/密码: -touch test.txt

  • git add test.txt

  • git commit-打开编辑器,输入消息并保存文件。如果vi是您的编辑器,则i在打开文件后按,输入消息,按esc,然后按Enter :x保存更改。

  • git push

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

狩猎愉快!


20

尝试安装“ 适用于Windows的Git凭据管理器 ”(以及有关设置凭据管理器的说明)。

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


3
我希望也有一个“ Linux的Git凭据管理器”。哦,等等我ssh-agent已经在跑步了。但是VS Code似乎在Linux上忽略了这一点。
wigy

这对我来说是最简单的解决方案。而且效果很好!感谢您指出这一点
dapidmini

20

我要做的就是运行以下命令:

git config --global credential.helper wincred

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

下次它可以正常工作而不会提示我输入密码。


2
谢谢!问题解决了,这也是
Jeffrey Roosendaal '18

4
在Ubuntu上,使用store代替wincred
Cees Timmerman

1
这对我有用!您也可以这样做,例如git config --global credential.helper 'cache --timeout==1209600'使它持续2周,而不是默认的15分钟。来源:help.github.com/en/github/using-git/...
安德鲁

1
^有关此内容的更多信息,请参见此处:git-scm.com/docs/gitcredentials git-scm.com/docs/git-credential-cache git-scm.com/docs/git-credential-store store将其永久存储在磁盘。另外,我之前的评论有一个错误:不要使用==,请使用=。太晚了,无法编辑。
安德鲁

18

使用ssh而不是http / https。

您将需要在本地计算机上设置ssh密钥,将其上传到git服务器,然后将url表单替换为http://git://并且您将不再需要使用密码。

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

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

文件在这里


在github中使用ssh键


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

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

  • home/.ssh目录(或Users/<your user>.sshWindows下)中设置密钥后,将其打开并复制内容


如何将sh键添加到github帐户?

  • 登录到github帐户
  • 单击右上角的牧场主(设置)
    github帐户settigns
  • 点击 SSH keys
    ssh密钥部分
  • 点击 Add ssh key
    添加SSH密钥
  • 粘贴密钥并保存

你们都准备去了:-)


4
您还应该弄清楚根本原因是什么。就我而言,由于我启用了两因素身份验证,因此SSH是连接到回购协议的唯一方法。任何https连接都会导致此类提示。
Lex Li

@codeWizard我不记得确切发生了什么,但是VS Code可以正常工作,我的意思是无需任何额外配置即可连接到GitHub存储库,我想可能是我在Github Desktop之后安装了Git的问题,可能吗?
ddieppa 2015年

VC可能会在内部存储其凭据,一旦您重新安装/升级了git,则可能已更改了配置。我不是UNIX用户的VC用户,所以我无法在我的计算机上对其进行测试。
CodeWizard 2015年

3
@codeWizard VS Code是开源和多平台的,您可以在Windows,MacOS或Linux上运行它:),在ssh变体上运行,看看我能得到什么
ddieppa 2015年

1
到文档的链接已损坏。
维沙尔

13

通常,您可以使用内置的凭据存储功能:

git config --global credential.helper store

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

git config --global credential.helper wincred

或者,如果您使用的是MacOS,则可以使用其凭据系统:

git config --global credential.helper osxkeychain

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


6

自动Git身份验证。从v1.45 发行说明中

GitHub仓库的GitHub身份验证

VS Code现在具有针对GitHub存储库的自动GitHub身份验证。现在,您无需在系统中配置任何凭据管理器,就可以在公共存储库和私有存储库之间进行克隆,提取和推送。甚至在集成终端中调用的Git命令(例如git push)现在也会自动根据您的GitHub帐户进行身份验证。

您可以使用该git.githubAuthentication设置禁用GitHub身份验证 。您也可以使用该git.terminalAuthentication 设置禁用终端身份验证集成。


大!在Linux(Ubuntu 18.04 + KDE Plasma)上禁用这两个设置可修复凭据处理。这两个功能askpass = /usr/bin/ksshaskpass在我中处于压倒状态,.gitconfig因此每次我都要求输入用户名和密码。随着更多计算机上的1.45版角色出现,这可能会受到更多的支持。
Andrei Sinitson

4

对于Windows 10:转到控制面板/凭据管理器/ Windows凭据->单击git链接,->编辑->更新为新密码。那应该工作


2

使用不带密码的SSH密钥。

也许这对某些人是显而易见的(对我而言不是)。如果您绝对需要密码,它也不能解决问题,但这在我的Mac电脑上是一个不错的妥协。


2

经过一番类似的战斗之后,我想我想出了一个不错的解决方案,尤其是当在GitHub和BitBucket上拥有多个帐户时。但是,对于VSCode而言,它最终还是从Git Bash终端启动时结束了,因此它继承了bash会话中的环境变量,并且知道要查看哪个ssh-agent。

我意识到这是一篇过时的文章,但是我仍然很难找到一个地方来获取所需的信息。此外,自2017年以来,ssh-agent可以仅在您尝试访问存储库时提示您输入密码短语。

如果有人感兴趣,我会将调查结果放在这里



1

请按照以下步骤解决问题。

卸载软件Vscode和git并重新安装。将git仓库克隆URL从ssh更改为https。


1

我在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凭据弹出窗口出来了,问题解决了。


0

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

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


0

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

  1. 卸载Git Desktop(不确定是否需要这样做)
  2. 卸载Credentials Manager,cd "C:\Program Files\Git\mingw64\libexec\git-core"然后再卸载git-credential-manager.exe uninstall
  3. 重置凭据助手以使用Wincred git config --global credential.helper wincred
  4. 用户VS代码以推送一些更改并重新输入凭据。

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


0

我用一种简单的方法解决了类似的问题:

  1. 前往CMD或终端
  2. 类型 git pull origin master。用您的远程名称替换“ origin”
  3. 它将要求提供凭据。输入。

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


0

除了添加上面的ssh config条目

如果窗户

Set-Service ssh-agent -StartupType Automatic 

在PowerShell中,现在vs代码不应提示...


0

对于Windows 10,请按Windows密钥类型cred,然后应在“控制面板”中看到“凭据管理器”,单击以打开,然后删除相关的缓存凭据,然后重试,它将要求用户ID密码输入正确的密码,您会很好。

更改网络密码后发生的事情


0

我通常运行此简单命令将git远程URL从https更改为ssh

git remote set-url origin git@github.com:username/repo-name-here.git
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.