我使用Git已经有一段时间了,但不断的密码请求开始让我感到很烦。

我使用的是Mac OS X和GitHub,我按照GitHub的设置Git页面的指示设置Git和SSH密钥。

我还将github SSH密钥添加到了我的Mac OS X密钥链中,正如github的SSH密钥密码页面中提到的那样。我的公钥已在Git中注册。

然而,每次我尝试Git拉时,我都必须输入用户名和密码。除了SSH密钥之外,我是否需要为此设置其他东西?


当前回答

我有这个问题。回购要求我每次都输入凭证。我所有的其他经纪人都没有要求我出示证件。他们甚至被设置为在相同的帐户凭据下使用HTTPS跟踪GitLab,所以奇怪的是,除了一个,他们都工作得很好。

比较.git/config文件,我发现导致问题的URL中有两个关键差异:

确实要求提供凭据:

https://gitlab.com/myaccount/myproject

不要求提供凭据:

https://myaccount@gitlab.com/myaccount/myproject.git 

因此,添加“myaccount@”和“.git”解决了我的问题。

其他回答

在GitHub中使用密钥之前,请按照教程中的步骤测试SSH连接:

$ ssh -T git@github.com
# Attempts to ssh to GitHub

如果您使用https协议,Git将提示您输入密码。如果您使用ssh,它将使用您的私钥进行身份验证,而不是询问密码。

以下是解决此问题的方法:

git远程-v

这将显示来源的url。您将注意到此url中的https。(此处示例)

现在,您必须先删除这个,然后使用ssh添加url

git remote remove origin

git remote add origin git@github.com:PrestaShop/PrestaShop.git

正如其他人所说,您可以安装密码缓存助手。我主要只是想发布其他平台的链接,而不仅仅是Mac。我正在运行Linux服务器,这很有用:在Git中缓存GitHub密码

对于Mac:

git credential-osxkeychain

窗户:

git config --global credential.helper wincred

Linux:

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

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

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

git config --unset credential.helper

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

git config --global credential.helper store

我认为您可能有错误的Git存储库URL。

打开.git/config并找到[remote“origin”]部分。确保您使用的是SSH:

ssh://git@github.com/username/repo.git

如果单击克隆或下载并选择SSH,您可以在存储库的主页面中看到SSH URL。

而不是https或git:

https://github.com/username/repo.git
git://github.com/username/repo.git

现在,您可以只使用SSH密钥而不是用户名和密码进行验证。

如果Git抱怨已经添加了'origin',请打开.config文件,将[remote origin]后面的url=“…”部分编辑为url=ssh://github/username/repo.git


其他服务也是如此。确保地址如下:protocol://something@网址

例如,Azure DevOps的.git/config:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*