背景
如果你的工作环境中有多个git项目,而且每个项目上git的用户名,邮箱等,都不一样,那么有两种方法,一是使用https的方式,但是这个方式的话,基本每次push的时候,都要输入密码,太麻烦了。所以还是比较喜欢直接使用ssh的方式,本地托管个ssh的密钥。既不要输入密码,也方便配置。
生成ssh key
打开terminal,执行如下命令:
ssh-keygen -t rsa -C "yuanfentiank789@gmail.com"
接下来会提示你输入秘钥文件的名字(默认为id_rsa)和密码,密码可以不设置,直接回车即可,会在当前用户根目录下的.ssh文件夹生成一对秘钥(公钥和私钥)。如果以后想要修改密码,执行如下命令:
ssh-keygen -p <keyname>
配置config文件
首先,需要使用不同的用户名的话,那么就需要git不要使用有–global的配置。
git config --global user.name "username" >> 这样配置的话,会在~/.gitconfig写入你当前用户的全局配置。如果你都是同一个用户名及email那当然是方便的。但是如果你的git有多个的用户名及email的时候。最好是使用诸如此类的命令。
git config --local user.name "username" >> 这样的话,只是在当前的git项目中配置,其实这个配置就是在当前项目的顶级目录的.git/config写入用户名而已。
如果使用了ssh方式进行配置的话,多个的用户则需要添加~/.ssh/config配置,默认情况下,是没有该文件的。比如我这边的~/.ssh/config配置如下:
Host github.com
HostName github.com
User git
IdentityFile /Users/guangjie.peng/.ssh/github_rsa
Host gitlab.com
HostName gitlab.com
User git
IdentityFile /Users/guangjie.peng/.ssh/gitlab_rsa
这样配置,也就是使用hostname为github.com并且会根据用户名的不同,去使用不用的private key。这样就不会像https方式push的时候需要输入密码。很方便很快捷,基本是一劳永逸了。github上,也可以添加对应的公钥。其实这个配置是关于ssh的与git并没有多大关系,只是git使用的方式是ssh的方式。其实ssh还有很多种的配置方式。配置好后,我们可以测试一把,看看本地能不能通过SSH跟github.com服务器通信了:
MacBook-Pro:.ssh guangjie.peng$ ssh -T github.com
Hi yuanfentiank789! You've successfully authenticated, but GitHub does not provide shell access.
扩展
git之https或http方式设置记住用户名和密码的方法
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速
设置记住密码(默认15分钟):
git config --global credential.helper cache 如果想自己设置时间,可以这样做:
git config credential.helper 'cache --timeout=3600' 这样就设置一个小时之后失效
长期存储密码:
git config --global credential.helper store 增加远程地址的时候带上密码也是可以的。(推荐)
http://yourname:password@git.oschina.net/name/project.git
补充:使用客户端也可以存储密码的。
如果你正在使用ssh而且想体验https带来的高速,那么你可以这样做: 切换到项目目录下 :
cd projectfile/ 移除远程ssh方式的仓库地址
git remote rm origin 增加https远程仓库地址
git remote add origin http://yourname:password@git.oschina.net/name/project.git 搞定,enjoy the speed!