我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
当前回答
如果您克隆了HTTPS而不是SSH,并且在pull、push和fetch时遇到用户名和密码提示问题。您可以简单地为UBUNTU解决此问题
步骤1:移动到根目录
cd ~/
创建文件.git凭据
使用用户名密码和githosting URL将此内容添加到该文件
https://user:pass@example.com
然后执行命令
git config --global credential.helper store
现在,您将能够轻松推送并从回购中获取所有详细信息。
其他回答
如果您使用的是SSH,并且您的私钥是用密码短语加密的,那么在使用Git进行推送、拉取等网络操作时,仍会提示您输入私钥的密码短语/密码。
使用ssh代理保存私钥密码/密码凭据
如果您想避免每次都输入密码,可以使用ssh代理在每个终端会话中存储一次私钥密码凭据,正如我在回答“无法打开与身份验证代理的连接”时所解释的:
$ eval `ssh-agent -s`
$ ssh-add
在WindowsmsysgitBash中,您需要评估ssh代理的输出,但我不确定是否需要在其他开发环境和操作系统中执行同样的操作。
ssh-add在您的home.ssh文件夹中查找名为idrsa的私钥,这是默认名称,但您可以将文件路径传递给具有不同名称的密钥。
杀死特工
完成终端会话后,可以使用kill标志-k关闭ssh代理:
$ ssh-agent -k
如ssh代理手册中所述:
-克终止当前代理(由SSH_agent_PID环境变量给定)。
可选超时
此外,它可以采用一个可选的超时参数,如下所示:
$ ssh-add -t <timeout>
其中<timeout>的格式为<n>h表示<n>小时,<n>m表示<n<分钟,依此类推。
根据ssh代理手册:
-t寿命设置添加到代理的标识的最大生存期的默认值。可以以秒或sshdconfig(5)中指定的时间格式。使用ssh-add(1)为标识指定的生存期将覆盖此值。如果没有此选项,默认的最长生存期为永久。
有关更多时间格式,请参阅本页。
Cygwin用户的安全警告
Cygwin用户应该意识到在Cygwin中使用ssh代理存在潜在的安全风险:
人们应该认识到Cygwin 1下ssh代理的潜在危险,尽管在本地netstat和远程portscan下,似乎任何人都无法访问/tmp/ssh-foo中指定的端口。。。?[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
在引用的链接中:
然而,请注意Cygwin的Unix域套接字是基本上不安全的,因此我强烈发现Cygwin下ssh代理的使用。当您在Cygwin下运行ssh代理时,它会在/tmp/ssh-$USERNAME/目录中创建AF_UNIX套接字。在Cygwin下,AF_UNIX套接字通过AF_INET套接字进行模拟。如果您通过记事本查看/tmp/ssh-$USERNAME/agent-socket-*文件,您可以很容易地看到这一点。你会看到类似的东西!<插座>2080然后运行netstat-a并惊喜!您有一些程序正在侦听端口2080。这是ssh代理。当ssh从服务器接收到RSA质询时,它会引用相应的/tmp/ssh-$USERNAME/agent socket-*(在本例中是在Cygwin下,这意味着它将打开到localhost:2080的连接),并要求ssh代理使用其拥有的私钥来处理RSA质询,然后简单地将从ssh代理接收到的响应传递给服务器。在Unix下,这样的场景运行起来没有问题,因为当程序试图访问AF_Unix套接字时,Unix内核会检查权限。然而,对于AF_INET套接字,连接是匿名的(读取“不安全”)。想象一下,您正在运行Cygwin ssh代理。恶意黑客可能会对您的设备进行端口扫描,找到ssh代理使用的开放端口,打开与ssh服务器的连接,从中接收RSA质询,通过他/她找到的开放端口将其发送给ssh代理,接收RSA响应,将其发送到ssh服务器,瞧,他/她成功地以您的身份登录到您的服务器。
来源:设置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)
直接更新Git配置文件(如果不想记住花哨的命令):
在您喜爱的文本编辑器中打开.git/config文件。它将在您克隆的文件夹中或执行git init的存储库中。进入该存储库。git是一个隐藏的文件夹,按Ctrl+H应该会显示隐藏的文件夹(终端中的ls-a)。
下面是.git/config文件的示例。复制并粘贴这些行,并确保使用Git信息更新这些行。
[user]
name = Tux
email = tux@gmail.com
username = happy_feet
[remote "origin"]
url = https://github.com/happy_feet/my_code.git
fetch = +refs/heads/*:refs/remotes/origin/*
将SSH的URL部分更改为以下格式:
url = git@github.com:happy_feet/my_code.git
(以上格式不会随GitHub或Bitbucket等各种Git远程服务器而改变。如果您使用Git进行版本控制,则相同):
注意:连接到远程Git存储库的SSH方式将要求您将公共SSH密钥添加到Git远程服务器(如GitHub或Bitbucket。在设置页面搜索SSH密钥)。
要了解如何生成SSH密钥,请参阅:创建SSH密钥
这就是对我有用的:
git remote set-url origin https://username@github.com/username/reponame.git
例子:
git remote set-url origin https://jsmith@github.com/jsmith/master.git
# gen the pub and priv keys
# use "strange" naming convention, because those WILL BE more than 10 ...
ssh-keygen -t rsa -b 4096 -C "me@corp.com" -f ~/.ssh/id_rsa.me@corp.com@`hostname -s`
# set the git alias ONLY this shell session
alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me@corp.com.`hostname -s`" git'
# who did what when and why
git log --pretty --format='%h %ai %<(15)%ae ::: %s'
# set the git msg
export git_msg='issue-123 my important commit msg'
# add all files ( danger !!! ) and commit them with the msg
git add --all ; git commit -m "$git_msg" --author "Me <me@corp.com"
# finally
git push