如何确保Git不会要求我提供GitHub用户名和密码?


171

我正在GitHub上的一个仓库上工作,每次尝试推送内容时,它都会要求我的GitHub用户名和密码。我不希望那样做。

我尝试了在Git中设置您的电子邮件的说明,即设置Git变量github.user和github.token,但这没有任何区别。

我不明白为什么会这样。


Answers:


33

您需要设置一个ssh代理,您只需要对它进行一次身份验证。有关如何操作的信息,请参见SO的答案


1
但是此解决方案适用于ssh系列短语。问题是git使用“ git push”,我认为它不会触发ssh-agent。(我已经这样做了,所以我知道它不起作用。)
picardo 2010年

2
@picardo:我已经做到了,它的确起作用了。
丹妮丝

213

今天也遇到了类似的问题:我把工作副本弄乱了,所以我决定重命名目录,然后再次从github克隆我的项目。但是这样做之后,我必须输入密码来执行任何拉/推请求,而不是像过去那样只输入一次密码。

那是因为今天我使用https协议来克隆项目!要检查您使用的协议,只需运行

git config -l

并查看以“ remote.origin.url”开头的行。

切换协议:

git config remote.origin.url git@github.com:the_repository_username/your_project.git

the_repository_usernameyour_project应替换为适当的存储库名称和该存储库的所有者。如果您拥有存储库,则用户名将为您的用户名,否则为存储库所有者的用户名。


5
它为我工作。一件事是,该网址不包含我的用户名,而是我在github上显示的回购地址:git@github.com:some-user/repo-name.git
B

1
注意:谷歌把我带到这里。我将其remote.origin.url设置为https方法,甚至没有注意到有httpsvs ssh方法。此URL帮助我看到了明显的内容:help.github.com/articles/…–
Chris K

有没有办法通过密码输入呢?
zishe 2012年

对具有git知识的人的问:git config remote.origin.url ...上面使用的vs. 之间有git remote set-url origin ...什么区别(或偏好)?
Daryn 2013年

我不知道如何删除这样的错误来源。答案是:git remote rm origin
Vacilando

30

如果您使用的是HTTPS而不是SSH,则可以按照以下步骤操作:

  1. 找到您的远程URL(remote.origin.url)

    git config -l
    

    感谢Sergio Morstabilini

  2. 您的远程URL将如下所示:https:// {USERNAME} @ github.com / {USERNAME} / {REPONAME} .git

  3. 执行以下命令:

    git config remote.origin.url https://{USERNAME}:{PASSWORD}@github.com/{USERNAME}/{REPONAME}.git
    

2
我的用户名本身包含@,对我不起作用。
2014年

但是,如果没有(您不需要使用电子邮件),它就可以完美运行!谢谢。
Killah 2014年

4
如果您的用户名包含@,则需要对其进行URL编码。meyerweb.com/eric/tools/dencoder
Tim Bodeit 2014年

1
出于安全原因,您应该省略密码。
zygimantus

3
注意,密码将以纯文本格式存储在.git/config文件中!
Amro

26

我更喜欢使用HTTPS,我发现它比设置ssh密钥更容易,更安全。

使用HTTPS,您可以使用以下命令阻止git向github遥控器询问用户名:

git config --global url."https://yourusername@github.com".insteadOf "https://github.com"

而且您至少可以通过以下方式降低git要求输入密码的频率:

git config --global credential.helper 'cache --timeout=28800'

那里28800是8个小时。当我开始工作时,我仅使用此设置输入一次密码。

之后,您将在您的内部拥有这些条目 ~/.gitconfig

[url "https://yourusername@github.com"]
    insteadOf = https://github.com

[credential]
    helper = cache --timeout=28800

资源:

http://git-scm.com/docs/git-credential-cache

http://git-scm.com/docs/git-config


6

当您为github设置ssh密钥时,如果不是您的默认密钥,则需要在其中添加一个部分 ~/.ssh/config

Host *github.com
    User git
    IdentityFile ~/.ssh/github_id_rsa

6

如果您在Windows上使用HTTPS,请尝试使用Git凭据存储 -它使用Windows凭据存储来保存您的名称和密码。

Windows Credential Store for Git
This application is a small helper app designed to follow the 
git credentials API as defined by the Git Documentation.

Installation
1. Download the git-credential-winstore.exe application
2. Run it! If you have GIT in your PATH, it should just work.

然后,下次您输入名称和密码时,它将为您记住它们。


1
谢谢。该项目已重命名为Windows的Git-Credential-Manager-for
Michael S.

5

另外,如果希望每次都提示您输入密码,但不提示您输入用户名,则可以使用用户名将远程配置为HTTPS。

git config remote.origin.url https://USERNAME@github.com/repo_owner/repo_name

之后,每次都会提示您输入密码,但不会提示您输入用户名。

这就是我喜欢的方式,因为我喜欢在与世界分享之前被迫输入github密码。


2

如果您使用的是2因子身份验证,则情况会有所不同。由于在其他地方找不到很好的答案,因此我在这里贴一个,以便以后再找到。

如果您使用的是2要素身份验证,则指定用户名/密码将无法正常工作-您将被拒绝访问。但是您可以使用应用程序访问令牌,并使用git的凭据帮助器为您缓存该令牌。以下是相关链接:

而且我不记得我在哪里看到的内容,但是当系统询问您输入用户名时,您就在这里粘贴应用程序访问令牌。然后将密码留空。在我的Mac上工作。


2

使用SSH

为了防止GitHub在推送时询问密码,理想情况下,您应该使用SSHgit@github.com:...)而不是HTTPS URL(https://github.com/...),并将SSH密钥添加到GitHub帐户中。请参阅:应该使用哪个远程URL?

GitHub-使用SSH克隆

凭证助手

否则,如果您确实需要使用HTTPS 在Git中缓存GitHub密码,则应该使用凭据助手来告诉Git每次与GitHub对话时都要记住您的GitHub用户名和密码。

  • 苹果:git config --global credential.helper osxkeychainosxkeychain helper需要)
  • 视窗: git config --global credential.helper wincred
  • Linux和其他: git config --global credential.helper cache

.netrc

另一种方法是在~/.netrc_netrcWindows上)中使用配置您的用户名/密码,例如

machine github.com
login USERNAME
password PASSWORD

OAuth

使用OAuth令牌个人API令牌)来推送更改,例如

git push https://4UTHT0KEN@github.com/foo/bar

有关:


1

另外,如果您使用的是Windows,则可以使用:

$ git config --global credential.helper wincred

您只需要再登录一次,然后git就会记住。


1

询问用户名对我来说很烦人,但是询问密码很好,因为它可以确保您确实希望公开所做的更改...

所以我只是将其添加到我的“ .gitconfig”中

[url "https://myusername@github.com"]
    insteadOf = https://github.com

0

如果您使用的是Windows,请使用适用于Windows的Git Credential Manager

该项目包括

  • Windows凭据存储中的安全密码存储
  • 对Visual Studio Team Services的多因素身份验证支持
  • 对GitHub的两因素身份验证支持
  • 针对Visual Studio Team Services和GitHub的个人访问令牌生成和使用支持
  • 对Azure目录支持的Visual Studio Team Services的非交互模式支持
  • Team Foundation Server的Kerberos身份验证
  • 用于优化构建代理的可选设置

只需下载最新版本并安装。

如何使用

你不知道 当需要凭据时,它神奇地工作。

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.