我最近切换到将我的存储库同步到GitHub上的https://(由于防火墙问题),它每次都会要求输入密码。

有没有办法缓存凭据,而不是每次git推送时都进行身份验证?


当前回答

您还可以让Git使用Git凭据存储永久存储您的凭据,如下所示:

git config credential.helper store

注意:虽然这很方便,但Git会在项目目录下的本地文件(.git凭据)(参见下面的“home”目录)。如果不喜欢,请删除此文件并切换到使用缓存选项。

如果您希望Git恢复到每次需要时都向您请求凭据连接到远程存储库,可以运行以下命令:

git config --unset credential.helper

要将密码存储在%HOME%目录(而不是项目目录)中的.git凭据中,请使用--global标志

git config --global credential.helper store

其他回答

如果你像我一样使用双因素身份验证,情况就有点不同了。因为我在其他地方找不到好答案,所以我会在这里留下一个,这样也许我可以稍后找到它。

如果您使用的是双因素身份验证,那么指定用户名/密码甚至不起作用——您的访问被拒绝。但您可以使用应用程序访问令牌,并使用Git的凭据助手为您缓存该令牌。以下是相关链接:

设置命令行以使用2-factor auth(搜索标题为“它如何为命令行Git工作?”的部分)凭据缓存

我不记得我是在哪里看到的,但当你被要求输入用户名时,你就会在那里粘贴应用程序访问令牌。然后将密码留空。它在我的Mac上运行。

我在MacOS上也遇到了这个问题,以下命令对我有效:

rm -rf  ~/.git-credentials 

这是一种强制方法,可以真正删除所有git凭据。下次我使用push命令时,瞧:系统会提示我输入用户名和密码(或令牌)。

我并没有立即意识到我需要先下载助手!我在Atlassian的永久认证Git存储库中找到了credential.helper下载。

报价:

如果您想在OS X上使用带有凭据缓存的Git,请执行以下步骤:

下载二进制git凭证osxkeychain。

运行以下命令以确保二进制文件可执行:

chmod a+x git-credential-osxkeychain

将其放在/usr/local/bin目录中。

运行以下命令:

git config --global credential.helper osxkeychain

如果你不想像Mark所说的那样以明文形式存储密码,你可以使用不同的GitHub URL进行抓取,而不是推送。在配置文件中的[远程“原点”]下:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

当您推送时,它仍然会要求输入密码,但当您获取时,它不会要求输入密码。

截至2021,HTTPS远程有一个安全、用户友好的跨平台解决方案。不再输入密码!不再有SSH密钥!不再有个人访问令牌!

安装GitHub开发的Git凭据管理器(下载)。它支持对GitHub、BitBucket、Azure和GitLab的无密码OAuth认证。这意味着您可以在GitHub和其他平台上启用双因素身份验证,大大提高了帐户的安全性。

推送时,您可以选择身份验证方法:

> git push
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Device code
  3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...

在Linux上,需要一点点设置。以下内容将凭据缓存在内存中20小时,因此您每天最多只能进行一次身份验证。

git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions=--timeout 72000

熟悉gnomekeyring或KWallet的高级用户可能更喜欢将凭证存储更改为libsecret。

外观配置:由于我总是在上面的提示下选择“web浏览器”,所以我设置了gitHubAuthModes首选项来跳过选择。GCM的最新版本包括一个GUI,它为授权流添加了额外的点击,我禁用了它。

git config --global credential.gitHubAuthModes browser
git config --global credential.guiPrompt false