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

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


当前回答

你可以使用

git config credential.helper store

当您下次使用pull或push输入密码时,它将以明文形式存储在文件.git凭据中(有点不安全,但只需将其放入受保护的文件夹中)。

如本页所述:

git凭证存储

其他回答

您可以使用Git凭据管理器(GCM)插件。它目前由GitHub维护。好的是,它将密码保存在Windows凭据存储中,而不是纯文本。

项目的发布页面上有一个安装程序。这还将安装内置凭据管理器的Windows Git官方版本。它允许对GitHub(和其他服务器)进行双重身份验证。并具有用于初始登录的图形界面。

对于Cygwin用户(或已经使用官方Git For Windows的用户),您可能更喜欢手动安装。从发布页面下载zip包。解压缩包,然后运行install.cmd文件。这将安装到您的~/bin文件夹中。(确保~/bin目录位于PATH中。)然后使用以下命令对其进行配置:

git config --global credential.helper manager

然后,Git将在向任何服务器进行身份验证时运行Git-credential-manager.exe。

有一种简单、老式的方法可以将用户凭据存储在HTTPS URL中:

https://user:password@github.com/...

您可以使用git remote set URL<remote repo><URL>更改URL

这种方法的明显缺点是必须以纯文本存储密码。您仍然可以只输入用户名(https://user@github.com/…),这至少可以为您省去一半的麻烦。

您可能更喜欢切换到SSH或使用GitHub客户端软件。

使用凭据存储。

对于OS X和Linux上的Git 2.11+,请使用Git内置的凭据存储:

git config --global credential.helper libsecret

对于Windows上的msysgit 1.7.9+:

git config --global credential.helper wincred

对于OS X上的Git 1.7.9+,请使用:

git config --global credential.helper osxkeychain

在Ubuntu上使用GitCredentialManager(GCM)在本地缓存凭据,在Ubuntu 20.04和18.04上进行了测试,但应该可以在其他Linux发行版上运行。

设置git凭据管理器:

curl -LO https://raw.githubusercontent.com/GitCredentialManager/git-credential-manager/main/src/linux/Packaging.Linux/install-from-source.sh
sh ./install-from-source.sh
git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"
sudo rm -rf git-credential-manager/
sudo rm install-from-source.sh

转到回购并运行git fetch选择设备代码访问链接并输入输出中提供的代码

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

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

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

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