Git多仓库多账号使用指南

https://static.ffeeii.com/ffeeii.com/2022/04/git.png

大家好,飞哥分享日常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

总结

通过简单的配置就可以完成账号切换,快去试试吧。