避免git-push时总要输入username和password

在我们使用git push命令将本地仓库push到github上时,默认是需要输入username和password的,如果git push的次数多的话,这将是一件非常麻烦的事情,本文介绍了两种在git push时避免输入username和password的方法


由于本人水平有限,本文难免会有不当之处,欢迎读者批评指正

方法一:使用SSH

SSH的配置

关于SSH的配置,github的官方帮助文档中已经写的非常清楚,我不在这里重复,
请点击下面的链接访问此文档

Connecting to Github with SSH

多个帐号的设置

当存在多个帐号时,比如我们实验中要求建立一个符合指定命名规范的帐号来提交代码,而我又不想改动原来的账号,所以我又新建了一个账号专门用来提交实验代码,这时需要给每个帐号创建一个不同的SSH密钥
运行如下命令生成密钥

 这里的前提是你已经按着官方文档为第一个帐号生成了密钥,我们在这里为第二个账号生成一个不同的密钥

1
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

这时出现如下提示:

1
Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]

不要直接按Enter键,因为我们在为第一个帐号生成密钥的时候已经使用了默认的文件名字,所以在这里要用一个不同的名字,例如可以输入

1
/home/you/.ssh/id_rsa_another

之后运行

1
$ ls ~/.ssh

此时应该存在

1
2
3
4
5
.
├── id_rsa
├── id_rsa.pub
├── id_rsa_another
└── id_rsa_another.pub

然后按着官方帮助文档使用id_rsa_another.pub文件对帐号进行密钥设置

遇到的问题

当我配置好ssh以后发现执行git push命令的时候仍然需要输入username和password

解决方法

利用SSH协议的仓库URL必须是如下形式的

1
git+ssh://[email protected]/username/reponame.git

而我原始的URL是通过HTTP协议进行通信的

1
https://github.com/username/reponame.git

查看当前仓库的URL,运行命令

1
$ git remote show origin

修改URL,运行命令

1
$ git remote set-url origin git+ssh://[email protected]/username/reponame.git

现在再运行git push的时候就不需要输入密码了

也可以直接在git clone的时候选择使用SSH形式的URL
https-ssh

方法二:将username和password缓存起来

运行如下命令,你只需要第一次输入username和password,他们将会缓存在你的电脑中,所以以后每次执行push命令时,git将直接从缓存中读取这些信息

1
2
3
4
5
$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

你也可以指定缓存的时间

可选操作,默认将是永久缓存

1
$ git config --global credential.helper 'cache --timeout 7200'

After enabling credential caching, it will be cached for 7200 seconds (2 hour).

参考链接

  1. https://stackoverflow.com/questions/8588768/git-push-username-password-how-to-avoid/15149845
  2. https://stackoverflow.com/questions/8588768/git-push-username-password-how-to-avoid
  3. https://help.github.com/articles/which-remote-url-should-i-use/

特别鸣谢

感谢upupming提供的建议