我从GitHub账户将Git仓库克隆到了PC上。
我想要使用同一个GitHub账户在PC和笔记本电脑上进行操作。
当我尝试使用PC推送或拉取GitHub时,需要输入用户名和密码,但是使用笔记本电脑则不需要!
我不想每次与origin
交互时都输入用户名和密码。我错过了什么?
我从GitHub账户将Git仓库克隆到了PC上。
我想要使用同一个GitHub账户在PC和笔记本电脑上进行操作。
当我尝试使用PC推送或拉取GitHub时,需要输入用户名和密码,但是使用笔记本电脑则不需要!
我不想每次与origin
交互时都输入用户名和密码。我错过了什么?
一个常见的原因是使用默认的 HTTPS 克隆而不是 SSH。您可以通过进入存储库,单击“Clone or download”,然后单击 URL 字段上方的“Use SSH”按钮并更新您的origin远程URL来纠正此问题。
git remote set-url origin git@github.com:username/repo.git
您可以使用以下方式检查您是否将远程添加为HTTPS或SSH:
git remote -v
这在GitHub上有文档说明:从HTTPS切换到SSH的远程URL。
git remote set-url origin https://name:password@github.com/repo.git
。该内容来源于此处的评论。 - Bruno Berisso运行以下命令以启用凭据缓存:
$ git config credential.helper store
$ git push https://github.com/owner/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
git config credential.helper 'cache --timeout 7200'
启用凭证缓存后,它将被缓存7200秒(2小时)。对于每天登录一次的情况,43200秒=12小时也是一个合理的选择。
git config --global credential.helper store
git config --global credential.helper 'cache --timeout 7200'
git remote set-url origin https://git@github.com/<owner>/<repo>.git
命令更改远程 URL。这个命令也适用于双重认证。 - Bron Davies我刚遇到了同样的问题,我发现最简单的解决方案是使用SSH URL而不是HTTPS:
ssh://git@github.com/username/repo.git
而不是这个:
https://github.com/username/repo.git
现在您可以使用只有SSH密钥进行验证,而无需使用用户名
和密码
。
git remote -v
查看当前的URL,使用 git remote set-url --push origin
设置它们。 - SurpriseDog除了改用SSH,如果您不介意将密码以明文形式输入,则仍然可以使用HTTPS。将以下内容放入您的~/.netrc
文件中,它就不会要求您输入用户名/密码(至少在Linux和Mac上):
machine github.com
login <user>
password <password>
补充说明(请参见VonC的第二个评论):在Windows上,文件名是%HOME%\_netrc
。
如果您想加密,请阅读VonC的第一个评论。
另外一个补充说明(参见user137717的评论),如果您使用Git 1.7.10或更新版本,可以使用以下链接中提供的方法缓存您的GitHub密码:
如果您使用HTTPS克隆GitHub存储库,则可以使用凭证助手告诉Git每次与GitHub通信时记住您的GitHub用户名和密码。
这也适用于Linux、Mac和Windows。
%HOME%\_netrc
(而非~/.netrc
),就可以完美运行。参考https://dev59.com/om435IYBdhLWcg3wkA5e#18362082了解如何加密该文件。 - VonC对于那些被之前的回答搞糊涂的新手,你可以这样做:
git remote -v
这将会响应出类似于以下内容:
origin https://yourname@github.com/yourname/yourrepo.git (fetch)
origin https://yourname@github.com/yourname/yourrepo.git (push)
那么你现在可以运行其他人建议的命令,但是现在你已经从上面知道了你的名称和存储库,所以你可以直接将yourname/yourrepo.git
从上面复制并粘贴到以下位置:
git remote set-url origin git@github.com:yourname/yourrepo.git
yourrepo
该用什么替换? - Raphigit remote -v
命令,看看会输出什么。 - Davidehttps://github.com/orgname/yourrepo.git
,而非个人账户。 - Nikhil VJ$ eval `ssh-agent -s`
$ ssh-add
在Windows的msysgit Bash中,您需要评估ssh-agent的输出,但我不确定在其他开发环境和操作系统中是否需要这样做。
ssh-add会在您的主目录.ssh文件夹中查找名为id_rsa的私钥,默认名称,但您可以传递文件路径以使用不同名称的密钥。
关闭ssh-agent时,您可以使用kill标志-k来终止会话。
$ ssh-agent -k
正如在ssh-agent
手册中所解释的:
-k
Kill the current agent (given by the SSH_AGENT_PID environment variable).
另外,它可以像这样带有可选的超时参数:
$ ssh-add -t <timeout>
<timeout>
的格式为<n>h
表示<n>
小时,<n>m
表示<n>
分钟等。
根据ssh-agent
手册:
-t life
Set a default value for the maximum lifetime of identities added to the agent. The lifetime may be specified in seconds or in a time format specified in sshd_config(5). A lifetime specified for an identity with ssh-add(1) overrides this value. Without this option the default maximum lifetime is forever.
Cygwin用户应该注意,在Cygwin中使用ssh-agent可能存在潜在的安全风险:
people should be cognizant of the potential dangers of ssh-agent under Cygwin 1, though under a local netstat and remote portscan it does not appear that the port specified in /tmp/ssh-foo is accessible to anyone ...?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
而在引用链接处:
however, note that Cygwin's Unix domain sockets are FUNDAMENTALLY INSECURE and so I strongly DISCOURAGE usage of ssh-agent under Cygwin.
when you run ssh-agent under Cygwin it creates AF_UNIX socket in
/tmp/ssh-$USERNAME/
directory. Under Cygwin AF_UNIX sockets are emulated via AF_INET sockets. You can easily see that if you'll look into/tmp/ssh-$USERNAME/agent-socket-*
file via Notepad. You'll see something like!<socket >2080
then run
netstat -a
and surprise! You have some program listening to port 2080. It's ssh-agent. When ssh receives an RSA challenge from the server, it refers to corresponding/tmp/ssh-$USERNAME/agent-socket-*
(under Cygwin, in our case, that means it'll open connection tolocalhost:2080
) and asks ssh-agent to process the RSA challenge with the private key it has, and then it simply passes the response received from the ssh-agent to the server.Under Unix, such a scenario works without problems, because the Unix kernel checks permissions when the program tries to access an AF_UNIX socket. For AF_INET sockets, however, connections are anonymous (read "insecure"). Imagine, that you have the Cygwin ssh-agent running. A malicious hacker may portscan your box, locate open port used by ssh-agent, open a connection to your SSH server, receive the RSA challenge from it, send it to your ssh-agent via an open port he/she found, receive the RSA response, send it to the SSH server and voila, he/she successfully logged in to your server as you.
git push
,git pull
等命令时它仍然要求输入密码,而我不喜欢存储凭据,尽管这是我的个人机器(作为最佳实践)。 ssh-add
的建议真的很有用。谢谢 :) - itsraghz来源: 设置Git
以下命令将在一段时间内将您的密码保存在内存中(适用于 Git 1.7.10 或更新版本)。
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
remote.origin.url
,以避免每次推送时输入用户名(或/和密码)。
如何配置 remote.origin.url
:
URL格式: https://{username:password@}github.com/{owner}/{repo} URL中的参数: * username
可选项,需要使用的用户名。如果指定身份验证,需要时无需再次输入用户名。 不要使用电子邮件;请使用没有“@”符号的用户名,否则URL无法正确解析, * password 可选项,需要身份验证时使用的密码。 如果指定,则需要身份验证时无需再次输入密码。 提示:该值以明文形式存储,因此出于安全考虑,请勿指定此参数, * 例如: git config remote.origin.url https://eric@github.com/eric/myproject
ssh
我认为使用ssh
协议比https
更好的解决方案,尽管设置步骤稍微复杂一些。
大致步骤:
ssh-keygen
,在Windows上使用msysgit
提供了类似的命令。~/.ssh
。并通过ssh-add
命令将其添加到ssh代理。remote.origin.url
更改为ssh
样式,例如git@gitlab.com:myaccount/myrepo.git
提示:
https
和ssh
协议之间切换。只需更改remote.origin.url
即可,或者直接编辑repo_home/.git/config
更改值(例如在Linux上使用vi
)。
通常我为每个协议添加一行,并注释其中一个使用#
。
例如:
[remote "origin"] url = git@gitlab.com:myaccount/myrepo.git # url = https://myaccount@gitlab.com/myaccount/myrepo.git fetch = +refs/heads/*:refs/remotes/origin/*
https://username:password@github.com/
提供密码是安全的。参见 https://dev59.com/NG445IYBdhLWcg3wNXk_ - slowhandssh
是更好的解决方案,而且可以完全自动化,我现在都使用 ssh
,除非由于网络问题无法使用。 - Eric如果您在Github帐户上启用了双重身份验证(2FA),则常规密码无法使用于此,但您可以生成一个个人访问令牌并代替密码使用。
访问GitHub的 Settings
-> Developer Settings
-> Personal Access Tokens
页面(https://github.com/settings/tokens/new),并生成一个具有所有Repo权限的新令牌:
页面将显示新令牌值。保存此值,并在将代码推送到GitHub上的存储库时使用它来代替密码:
> git push origin develop
Username for 'https://github.com': <your username>
Password for 'https://<your username>@github.com': <your personal access token>
git config credential.helper store
,否则下次与远程进行交互时,此令牌将不再存在。对吗? - topher217你可以在Git中缓存你的GitHub密码:
只需按照GitHub官方文档上的指示进行操作:官方文档链接。
按照上面链接中的说明操作后,您应该能够无需每次输入用户名/密码即可推送/拉取您的存储库。