Git多仓库多账号使用指南
大家好,飞哥分享日常Git中几个使用场景。
Git自Linus2005年发布后,也成为项目代码库唯一官方,历史过去式的CVS,SVN已经不见踪影。在日常协作中,大家有几个账号协作是正常情况下,那怎么方便切换账号工作呢。
账号举例
首先使用 ssh-keygen
创建 ssh 密钥,
第一次创建使用的话默认文件名为 id_rsa,位置在 ~/.ssh/
创建副账号,需要指定文件名
cd ~/.ssh
# 创建主账号 fg@ffeeii.com 的 密钥,默认回车就可以
ssh-keygen -C "fg@ffeeii.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/fg/.ssh/id_rsa):
# 创建副账号 fg1@ffeeii.com 的 密钥,需要指定 id_rsa 文件名
ssh-keygen -C "fg1@ffeeii.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/fg/.ssh/fg1@ffeeii.com_rsa):
# 输入文件名,比如:fg1@ffeeii.com_id_rsa
账号 | 私钥 | 公钥 |
---|---|---|
主账号 fg@ffeeii.com | ~/.ssh/id_rsa | ~/.ssh/id_rsa.pub |
副账号 fg1@ffeeii.com | ~/.ssh/fg1@ffeeii.com_id_rsa | ~/.ssh/fg1@ffeeii.com_id_rsa.pub |
场景1:不同域名,不同账号
比如 github.com 和 gitee.com 2个域名
- github.com/user_name/repo_name,权限主账号
- gitee.com/user_name/repo_name1,权限副账号
主账号使用,github.com可以直接使用,无需额外设置
因为副账号的id_rsa需要指定,需要ssh 配置
vi ~/.ssh/config
# Host的值gitee.com,凡是 gitee.com域名IdentityFile统一使用fg1这个账号的id_rsa
Host gitee.com
HostName gitee.com
Port 22
User git
IdentityFile ~/.ssh/fg1@ffeeii.com_id_rsa
测试
ssh -T git@gitee.com
场景2:同一域名,不同账号
比如在同一个域名github.com下面2个仓库
- github.com/user_name/repo_name,权限主账号
- github.com/user_name/repo_name1,权限副账号
主账号使用,可以直接使用,无需额外设置
ssh -T git@github.com
副账号需要设置 ssh 配置
vi ~/.ssh/config
添加如下内容
# Host的值fg1 可自行修改,后面代码库的地址需要一起用这个名称
Host fg1
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/fg1@ffeeii.com_id_rsa
测试
ssh -T git@fg1
相对应的代码clone的时候需要更换仓库代码的Host地址
# 比如以前为 git clone github.com/user_name/repo_name1.git 改如下:
git clone git@fg1:user_name/repo_name1.git
或者直接修改代码库 .git/config的代码库url参数地址来切换账号
vi .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@fg1:user_name/repo_name1.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
场景3:同一份代码,提交到2个仓库
一份在github,一份在gitee
vi .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com/user_name/repo_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@gitee.com/user_name/repo_name.git
[branch "master"]
remote = origin
merge = refs/heads/master
总结
通过简单的配置就可以完成账号切换,快去试试吧。