美文网首页
一台设备连接多个Git仓库

一台设备连接多个Git仓库

作者: CoderXLL | 来源:发表于2018-04-18 21:27 被阅读0次

    前言

    有人说这样能让读者心情愉悦地看文章🤣~

    文章背景

    因为自己想试着玩一下git的fork与pull request功能。所以注册了两个github账号来做实验。结果发现之前一直在用的A账号push是正常的。新注册的B账号push报错。

    Pushing to https://github.com/DistributionCoderXLL/XLLTest.git
    remote: Permission to DistributionCoderXLL/XLLTest.git denied to b593771943.
    fatal: unable to access 'https://github.com/DistributionCoderXLL/XLLTest.git/': The requested URL returned error: 403
    

    根据上面的报错,发现B账号DistributiionCoderXLL推送失败的原因是受限于A账号b593771943。

    解决思想

    使用多个SSH Key分别作为本地git仓库与GitHub远程仓库的纽带,这也是新账号不能正常push的原因所在

    1. 根据每个账号邮箱对应生成SSH Keys
    # 1. 打开ssh存放位置
    cd ~/.ssh
    # 2.对应每个github账号邮箱生成SSH Key
    ssh-keygen -t rsa -C "A邮箱地址" 
    ssh-keygen -t rsa -C "B邮箱地址" 
    在这个命令下第一个会话的时候,对生成的SSH Key进行命名。如id_rsa_github_one、id_rsa_github_two
    

    进入~/.ssh路径下,可以看到如下几个文件:

    对应两个账户的公私钥文件
    2. 将两个私钥加入到SSH的agent中
    # 1.删除原有agent中的所有私钥
    ssh-add -D
    # 2.对应将刚刚生成的私钥添加到agent中
    ssh-add id_rsa_github_one
    ssh-add id_rsa_github_two
    # 3.查看添加到agent的私钥列表
    ssh-add -l
    
    3.创建映射文件config,来分别映射本地git仓库与GitHub远程仓库
    #1.创建config文件
    touch config
    # 2.打开编辑config文件
    vim config
    # 3.编辑内容如下
    
    # one(1593771943@qq.com)  //第一个git账号
    Host github.com  //自定义host
    HostName github.com  
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github_one  //对应的ssh私钥
    User git
    
    # two(m15822049431@163.com)  //第二个git账号
    Host small.github.com  //自定义host
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github_two //对应的ssh私钥
    User git
    
    4.远程仓库部署SSH Key
    # 1.获取公钥内容
    vim id_rsa_github_one.pub
    打开后将文件内容全部复制到剪切板。
    

    分别在网页上登录GitHub账号,Settings -> SSH and GPG keys -> New SSH key,将刚刚复制到剪切板公钥内容对应添加进去。

    账号下添加公钥内容位置
    点击Add SSH key按钮,进行添加。成功后如下图:
    添加SSH公钥成功后
    5.测试SSH的连通性
    ssh -T git@example.com  example.com替换为config文件下对应的host名。
    
    image.png

    如果连通性没问题,会返回Hi xxx(你的github账号名)! You've ...。并且返回到网页上,看到刚才的钥匙变绿了。


    测试SSH连通性后
    6.重新配置每个账号下项目的远程地址

    可以回头重新看一下刚刚config文件对host的配置。

    1. A账号设置的Host为github.com,这个是github默认的,不用管。
    2. B账号设置的Host为small.github.com。但是我们克隆下来的时候,远程仓库使用的是默认的github.com。所以我们需要手动更新一下这个账号下克隆的远程仓库地址。
    # 1.cd到B账号下的本地代码仓库
    cd /Users/xiaole/XLLIMClient 
    # 2.查看此仓库的远程仓库地址
    git remote -v
    查看的远程仓库结果如下:
    origin  git@github.com:DistributionCoderXLL/XLLIMClient.git (fetch)
    origin  git@github.com:DistributionCoderXLL/XLLIMClient.git (push)
    

    我们看到B账号下的远程仓库还是git@github.com。并不是我们设置的git@small.github.com。所以我们要替换成自己定制的。

    # 3.移除原远程仓库
    git remote rm origin
    # 4.添加自定制远程仓库
    git remote add origin git@small.github.com:DistributionCoderXLL/XLLIMClient.git 
    

    大功告成

    做完这一切,A,B两个账号就可以无冲突地进行代码的commit,push,merge等操作了。
    如果想对这方面有所了解的话,建议大家动手操作一下。你动手做或多或少都会遇到问题。不得不对国内开发者进行一下吐槽。很多人自己都不动手操作,看着不错就对一些文章进行了转载,导致百度一大堆错误的文章,这是很不负责任的行为。

    相关文章

      网友评论

          本文标题:一台设备连接多个Git仓库

          本文链接:https://www.haomeiwen.com/subject/oghpkftx.html