github多帐号
多github帐号的ssh key切换
我有两个github帐号,一个是个人所用,一个是为公司项目所用。如果是单用户,很方便,默认拿id_rsa与你的github服务器的公钥对比;如果是多用户如user1,user2, 那么就不能用在user2的身上了,这个时候就要配置一下了
配置多个ssh key
新建user2的SSH Key
如何生成ssh密钥,可以参考 generating-ssh-keys
# 新建SSH key:
ssh-keygen -t rsa -P "" -f ~/.ssh/<new_id_rsa> -q
# -P "": 密码为空
# -f ~/.ssh/<密钥名字>: 生成的私钥路径,相应的共钥为 私钥路径.pub
# -q: Silence ssh-keygen
于是~/.ssh/
下会生产私钥<密钥名字>
和公钥<密钥名字>.pub
, 请勿泄露私钥内容
配置ssh config
~/.ssh/config
文件修改如下
# 默认github账号(github.com:user1), <github-user1别名>是服务器的alias
Host github.com <github-user1别名>
HostName github.com
User git
IdentityFile ~/.ssh/<user1密钥名字>
# github账号2(github.com:user2),<github-user2别名>是服务器的alias
Host <github-user2别名>
HostName github.com
User git
IdentityFile ~/.ssh/<user2密钥名字>
# gitlab
Host gitlab
hostname gitlab.widget-inc.com
User <gitlab用户名>
Port 65422
IdentityFile ~/.ssh/<gitlab密钥名字>
# oschina
Host oschina
hostname git.oschina.net
User <oschina用户名>
IdentityFile ~/.ssh/<oschina密钥名字>
- IdentityFile填私钥的路径,而非公钥的
添加公钥
打开新生成的``/.ssh/<user2密钥名字>.pub`文件,将里面的内容添加到GitHub网站上,user2的设置里
测试连接
若如下返回,则测试成功,两个密钥均可用
ssh -T <github-user1别名>
# 或
ssh -T git@github.com
# Hi <user1密钥名字>! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T <github-user2别名>
# Hi <user2密钥名字>! You've successfully authenticated, but GitHub does not provide shell access.
多ssh key的git免密pull/push
git push/pull
要想免输入github的用户名和密码,本地仓库关联的远程仓库 之url不能是https的,需必需是git@github.com
的,这样才能走ssh协议,调用~/.ssh/config下的密钥进行免密登录。
多个本地git帐号配置用户名与邮箱
参考
- 提交代码的时候,需要修改
git config
可以之设置一个全局的user.email和user.name,然后需要不同的配置的仓库,单独设置
# 设置global的用户名,设置为github的默认用户
# "<user1>"是github用户名,"<user1-email>"是github注册邮箱
git config --global user.name "<user1>"
git config --global user.email "<user1-email>"
# 或修改~/.gitconfig
[user]
name = <user1>
email = <user1-email>
# -----
# 设置仓库的user.email和user.name, 设置为github的非默认用户或修改
# "<user2>"是github用户名,"<user2-email>"是github注册邮箱
git config user.name "<user2>"
git config user.email "<user2-email>"
# 或修改./.git/config
[user]
name = <user1>
email = <user2-email>
github 仅通过 user.email
来识别提交的commit是哪个github用户交的。
因此,对于非默认用户用户设置需要注意:
"<user1>"
,"<user2>"
不强制填github用户名,这不会影响github识别用户,但依然建议填成github用户名,以便本地git log --format="%ae"
(%ae
表示显示user.email
)显示与github用户名一致。"<user1-email>"
,"<user2-email>"
必需填github上的注册邮箱。- 如果不配
"<user2-email>"
, github虽然能接收push,但会在github页面上显示是全局用户<user1>
交的。 - 如果
"<user2>"
填github用户名,而"<user2-email>"
填假邮箱,则可实现匿名,代价是github无法识别出是<user2>
提交的commit。
git免密pull/push设置方法
git clone创建
# 对于默认github账号 user1
git clone git@github.com:<github用户名>/<github的repo名>.git
# 对于其他github账号 user2
git clone <github服务器别名>:<github用户名>/<github的repo名>.git
本地repo设置远程仓库
# 对于默认github账号 user1
git remote add git@github.com:<github用户名>/<github的repo名>.git
# 对于其他github账号 user2
git remote add <github服务器别名>:<github用户名>/<github的repo名>.git
无法免密pull/push设置方法怎么办
需将本地repo文件夹下 .git/config
中的远程仓库的url,从https的改为git@github.com
的
- 见https的url:
[remote "origin"]
url = https://github.com/<github用户名>/<github的repo名>.git
它是从github上这里复制的
- 修改为
git@github.com
的:
[remote "origin"]
url = git@github.com:<github用户名>/<github的repo名>.git
它从github上这样复制
多github账号的免密git pull/push
上述url还可以写成
[remote "origin"]
url = <github服务器别名>:<github用户名>/<github的repo名>.git
<github服务器别名>
例如”github2”,这样就能实现多github账号的免密push/pull
git用户名
查看用户名
git config user.name
git config user.email
设置用户名
git config user.name "你的用户名"
git config user.email "你的邮箱"