目标
- 我的情况是,既要向自己的public库提交代码,又要向别人的private库提交代码
- 网上搜到的情况一:github上有多个账号,都要向自己的库提交代码
- 网上搜到的情况二:多个git托管源(比如github、bitbucket、gitlab、oschina、coding.net)上有不同的账号,分别提交到对应的git托管源
问题描述
- 之前在本机用ssh-keygen生成了~/.ssh/id_rsa和id_rsa.pub,放到了自己的Account->Settings->SSH and GPG keys里。别人的库Settings->Deploy keys里想添加这个公钥,会报"key is already in use"
- 不添加公钥,push代码时会报"Permission denied"
解决方法
其实都是大同小异,关键是不同的库生成不同的key-pair,并配置config保证找到正确的私钥:
- 对不同的库生成不同的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
编辑~/.ssh/config,保证ssh在push的时候能找到正确的私钥
```
vi ~/.ssh/configHost github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#ProxyCommand=nc -X 5 -x localhost:1086 %h %pHost projectName.github.com
ssh -T git@github.com //测试一下,看配置是否正确
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_projectName
ssh -T git@projectName.github.com
```- 别人的库要注意:
git clone git@projectName.github.com:UserName/projectName.git //新clone时
或者修改项目中的.git/config文件
[remote "origin"]
url = git@projectName.github.com:UserName/projectName.git