使用过GitHub的小伙伴们都知道,GitHub创建私有仓库是收费的,对于一些不能公开的代码是没有办法在GitHub上进行备份的。
这里我推介一个国内的代码托管网站——码云,它是一款国内的基于Git的研发协作平台,它是免费创建私有仓库的。操作基本与GitHub类似,对于使用GitHub的朋友上手起来非常容易。
这里我们在同一台电脑上同时添加GitHub和码云的仓库地址,私有的push到码云上,开源的push到GitHub上。
我们直接进入正题:
Git添加多个SSH密钥
有时候我们可能会在同一台电脑上使用多个SSH密钥,这里就会遇到权限问题。
如果你已经有了一套名为id_rsa的公秘钥,将要生成另外一个公钥,比如mayun,你也可以使用任何你喜欢的名字。
生成新密钥
打开你的GitBash键入:
$ ssh-keygen -t rsa -C "email@email.com" -f ~/.ssh/mayun
回车后,生成命名的公钥和生成默认公钥的步骤一样,全部跳过就行。
执行完成后,会在 ~/.ssh/目录下生成一个mayun
和mayun.pub
文件。
配置SSH中的config文件
在~/.ssh
的路径下会有一个config文件,没有的自己新建一个。
编辑config文件:
Host 别名
HostName 主机名
User 用户名
IdentityFile 路径
例如:
Host git@github.com
HostName https://github.com
User Passion-Logan
IdentityFile C:/Users/Cody_/.ssh/id_rsa
Host mayun
HostName https://gitee.com/
User 八阿哥
IdentityFile C:/Users/Cody_/.ssh/mayun
添加新密钥到另一个地址中
上面我们生成了一个名为mayun的密钥,这里我们添加到码云的用户设置中,
具体操作参照我上一篇文章中的配置Github账户的ssh key就好。
验证ssh权限
在GitBash中依次键入:
$ ssh -T git@github.com
$ ssh -T git@gitee.com
如果出现如下提示,则说明有权限问题:
$ Permission denied (publickey)
多用户出现权限问题的原因
github使用SSH与客户端连接。如果是单用户(first),生成密钥对后,将公钥保存至GitHub,每次连接时SSH客户端发送本地私钥(默认~/.ssh/id_rsa)到服务端验证。单用户情况下,连接的服务器上保存的公钥和发送的私钥自然是配对的。但是如果是多用户 (first,second),我们在连接到second的帐号时,second保存的是自己的公钥,但是SSH客户端依然发送默认私钥,即first的私钥,那么这个验证自然无法通过。
SSH密钥权限设置
1、查看系统ssh-key代理,如果出现Could not open a connection to your authentication agent.
可以执行ssh-agent bash
命令后再执行下面的操作:
$ ssh-add -l
输出以下提示,就表示没有代理,可以执行一下命令,否则执行ssh-add -D
命令清除代理:
$ The agent has no identities.
2、依次添加不同的ssh代理
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/mayun
3、验证ssh key
按照上面的依次键入:
$ ssh -T git@github.com
$ ssh -T git@gitee.com
//分别会提示你在config文件中设置的User名字,没有的话就表示设置错误了。
ssh-agent讲解
ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序
上面我们执行了ssh-agent bash
命令,是将bash挂到ssh-agent下面,只是一次性的;下次使用的时候还是需要对权限进行重新设置。
添加多个远程仓库
在我们的Git中既然有多个ssh key,那就表示有多个地址。添加步骤如下:
添加仓库地址
在GitBash中键入:
$ git remote add name <url> //name表示你要给这个远程仓库起的名字,url表示仓库地址
例如:
$ git remote add github https://github.com/xxx(仓库地址)
$ git remote add gitee https://gitee.com/xxx(仓库地址)
push代码的正确步骤
有时候我们可能会遇到这样的错误error: src refspec master does not match any
,引起这个错误的原因是目录中没有文件,空目录是不能被提交上去的。
$ touch README //也可以在创建室友仓库的时候创建
$ git add -A //提交所有改变的文件
$ git commit -m 'first commit' //提交更新,并注释'first commit'
$ git push -u name master //name是指你创建的地址的别名
如果push的时候出现To git@github.com。。。master->master。。。
,这里有人说可以使用git push -u origin master
来解决,可是键入后依然没能解决这个问题,导致的原因是地址中的README文件不在本地代码目录中,解决办法如下:
$ git pull --rebase name master //这里name是你自己地址的别名。
之后再执行push即可完成上传:
$ git push -u name master
参考文章:
《生成多个git ssh密钥》
《Git添加多个远程仓库》
《如何解决failed to push some refs to git》