我最近改成将我的仓库同步到GitHub上的https://(由于防火墙问题),它每次都要求输入密码。
有什么办法可以缓存凭证,而不是每次`git push'都要认证?
从Git 1.7.9(2012年1月底发布)开始,Git中出现了一个巧妙的机制,可以避免在HTTP/HTTPS中一直输入密码,称为credential helpers。(感谢dazonic在下面的评论中指出了这个新功能)。
在Git 1.7.9或更高版本中,你可以直接使用以下凭证助手之一。
git config --global credential.helper cache
...它告诉 Git 在内存中保留密码缓存(默认)15 分钟。你可以用以下方法设置更长的超时。
git config --global credential.helper "cache --timeout=3600"
(这个例子在 GitHub Linux 帮助页面中被建议。) 如果需要,你也可以永久保存你的凭证,见下面的其他答案。
GitHub的帮助还建议,如果你在Mac OS X上使用Homebrew来安装Git,你可以使用原生的Mac OS X密钥库与。
git config --global credential.helper osxkeychain
对于Windows,有一个名为Git Credential Manager for Windows或wincred in msysgit的辅助工具。
git config --global credential.helper wincred # obsolete
使用Git for Windows 2.7.3+(2016年3月)。
git config --global credential.helper manager
对于Linux,你可以使用gnome-keyring
(或其他钥匙圈实现,如KWallet)。
对于1.7.9之前的Git版本,这个更安全的选项是不可用的,你需要改变你的origin
远程使用的URL,以便以这种方式包含密码。
https://you:[email protected]/you/example.git
...换句话说,在用户名后面和@
之前加上:password
。
你可以为你的 "原点 "远程设置一个新的URL,用。
git config remote.origin.url https://you:[email protected]/you/example.git
请确保使用https
,你应该知道,如果你这样做,你的GitHub密码将以明文形式存储在你的.git
目录中,这显然是不可取的。
另一种方法是把你的用户名和密码放在你的~/.netrc
文件中,不过,和把密码放在远程URL中一样,这意味着你的密码将以明文形式存储在磁盘上,因此安全性较低,不建议使用。然而,如果你想采取这种方法,请在你的~/.netrc
中添加以下一行。
machine <hostname> login <username> password <password>
... 用服务器的主机名替换<hostname>
,用你的用户名和密码替换<username>
和<password>
。还要记得在该文件上设置限制性的文件系统权限。
chmod 600 ~/.netrc
注意,在Windows上,该文件应称为_netrc
,你可能需要定义%HOME%环境变量--更多细节见。
你也可以通过以下方式让Git永久地保存你的凭证。
git config credential.helper store
注意:虽然这样做很方便,但Git会把你的凭证以明文形式存储在 项目目录下的一个本地文件(.git-credentials)(见下面的"home" 目录)。如果你不喜欢这样,请删除这个文件并改用 缓存选项。
如果你想让Git在每次需要连接到远程仓库时恢复询问你的凭证 连接到远程仓库,你可以运行这个命令。
git config --unset credential.helper
要在你的%HOME%
目录下的.git-redentials
中存储密码,而不是项目目录:使用--global
标志
git config --global credential.helper store
如果你不想像Mark说的那样用明文存储密码,你可以使用不同的GitHub URL来获取和推送。在你的配置文件中,在[remote "origin"]
下。
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
当你推送时,它仍然会要求你输入密码,但当你获取时就不会了,至少对于开源项目是这样。