目标

  1. 我的情况是,既要向自己的public库提交代码,又要向别人的private库提交代码
  2. 网上搜到的情况一:github上有多个账号,都要向自己的库提交代码
  3. 网上搜到的情况二:多个git托管源(比如github、bitbucket、gitlab、oschina、coding.net)上有不同的账号,分别提交到对应的git托管源

问题描述

  1. 之前在本机用ssh-keygen生成了~/.ssh/id_rsa和id_rsa.pub,放到了自己的Account->Settings->SSH and GPG keys里。别人的库Settings->Deploy keys里想添加这个公钥,会报"key is already in use"
  2. 不添加公钥,push代码时会报"Permission denied"

解决方法

其实都是大同小异,关键是不同的库生成不同的key-pair,并配置config保证找到正确的私钥:

  1. 对不同的库生成不同的key-pair,比如自己所有的库用默认的id_rsa,别人的库用id_rsa_projectName
ssh-keygen -t rsa -C "test@gmail.com" // 注意修改key-pair的名字
ssh-add -K ~/.ssh/id_rsa // 我试下来似乎不用加到ssh-agent里?
ssh-add -K ~/.ssh/id_rsa_projectName
ssh-add -l
  1. 编辑~/.ssh/config,保证ssh在push的时候能找到正确的私钥
    vi ~/.ssh/config
    
    Host github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa
      #ProxyCommand=nc -X 5 -x localhost:1086 %h %p
    
    Host projectName.github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_projectName
    
    ssh -T git@github.com //测试一下,看配置是否正确
    ssh -T git@projectName.github.com
    
  2. 别人的库要注意:
git clone git@projectName.github.com:UserName/projectName.git //新clone时
或者修改项目中的.git/config文件
[remote "origin"]
        url = git@projectName.github.com:UserName/projectName.git

参考

 posted on 2017-08-01 23:42  AlexanderYao  阅读(341)  评论(0编辑  收藏  举报