有时候我们需要在同一台电脑上连接多个远程仓库,比如连接两个GitHub账号,那么需要两个条件。
1.生成两对 私钥/公钥
,并且密钥文件命名不能重复。
2.push 到remote时区分两个账户,推送到相应的仓库
生成私钥公钥的相应步骤:
(1)进入自己电脑的.ssh文件夹,查看文件夹里是否已经有一对公钥和私钥,如果已经存在一对公钥和私钥的话,那么我们就要创建新的公钥和私钥,新创建的公钥和私钥不能和之前的名字重复,进入自己的.ssh文件夹,打开cmd,输入下面的命令(x为任意名称):
ssh-keygen -t rsa -f id_rsa_x -C "yourmail@xxx.com"
如果要生成 BEGIN RSA PRIVATE KEY的话,命令可以修改成:
ssh-keygen -m PEM -t rsa -f id_rsa_x -C "yourmail@xxx.com"
(2)在自己的.ssh文件夹下创建一个名字为config的文件,无后缀名
# 第一个账号,默认使用的账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 第二个账号
Host second.github.com # second为前缀名,可以任意设置
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x
原理分析:
1.ssh 客户端是通过类似 git@github.com:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@
前面的git
, Host 是@
后面的github.com
。
2.如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com
。
3.配置了别名之后,新的地址就是git@second.github.com:githubUserName/repName.git**(在添加远程仓库时使用)。
这样 ssh 在连接时就可以区别不同的账号了。
(3)把id_rsa.pub和d_rsa_x.pub的值分别 copy 到 GitHub 账号中的 SSH keys 中保存。
(4)测试ssh连接
ssh -T git@github.com
ssh -T git@second.github.com
# xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
# 出现上述提示,连接成功
(5)取消 git 全局用户名/邮箱
的设置,设置独立的 用户名/邮箱
# 取消全局 用户名/邮箱 配置
$ git config --global --unset user.name
$ git config --global --unset user.email
# 进入项目文件夹,单独设置每个repo 用户名/邮箱
$ git config user.email "xxxx@xx.com"
$ git config user.name "xxxx"
(6)git bash 进入项目目录
$ git remote rm origin
# 远程仓库地址,注意Host名称
$ git remote add origin git@second.github.com:githubUserName/repName.git
$ git remote -v # 查看远程
(7)远程push测试
首先在 GitHub 上新建一个名为 testProj 的远程仓库,然后再在本地建一个本地仓库。
1.进入本地仓库文件夹,创建 REDME.md文件
2.初始化此文件夹为git仓库
3.添加并提交README.md到Git本地仓库
4.添加远程仓库
5.把README.md推送到远程仓库
$ git init
$ git add README.md
$ git commit -m "first commit"
# 如果前面已添加远程连接,就无需再次添加
$ git remote add origin https://github.com/ludilalaa/ludilala.github.io.git
$ git push -u origin master
参考文章:https://www.cnblogs.com/Renyi-Fan/p/9143088.html