如何使用多个 github 账户在本地推送代码

2023年06月20上次更新于 3 个月前
通识

Hello,大家好。今天给大家分享一下,如何在自己的电脑上配置多个github账户,这样有多个账户的朋友就可以很方便地在本地互不干扰地推送代码了。

账号设置

前置步骤如下:

  • 前往github注册两个账号
  • 安装git到本地
  • 生成ssh密钥

注册账户和安装git不需多言,假设我们现在注册了两个账户User1User2,二者的注册邮箱分别是[email protected][email protected]。然后打开终端,我们从生成ssh密钥开始:

# 输入命令后一直按回车即可,如果你对这些参数有疑惑,可以查找搜索引擎解释~
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/user1
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/user2

如上操作即可生成两个对应账户可用的密钥文件:

  • ~/.ssh/user1~/.ssh/user1.pub
  • ~/.ssh/user2~/.ssh/user2.pub

在生成密钥后,我们需要逐一将之复制到githubSSH and GPG keys配置中去。

我们可以逐一登录账户,并且进入SSH and GPG keys这个页面下,点击New SSH key按钮,再填写一个有助于你记忆这个密钥的信息的标题,Key type默认选择Authentication Key即可。

随后,将我们的密钥文件:~/.ssh/user1.pub的内容(注意这个密钥需要对应用户名user1,稍后复制的是user2.pub)复制到Key区域内即可。

📢:推荐执行以下命令复制密钥,以免复制的时候带上其他字符。(当然,你也可以通过cat命令查看密钥再复制,或是用文本编辑器打开密钥文件再复制)如下命令行操作如果有问题,可以用最简单的cat命令查看密钥,再用鼠标复制。

# macOS
tr -d '\n' < ~/.ssh/user1.pub | pbcopy
# Linux
xclip -sel clip < ~/.ssh/user1.pub
# Windows
cat ~/.ssh/user1.pub | clip

如图所示:

image-20230620130115497

然后退出登录,切换另一个账户继续上面的操作,注意别复制错了密钥文件

ssh 配置

首先,我们切换到.ssh目录下并且编辑配置文件:

cd ~/.ssh
# 编辑配置文件
vim config

你可以选择你擅长的编辑器来编辑配置文件,如果config文件不存在,则直接创建一个即可。

接着编辑配置文件:

# user1
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/user1
  IdentitiesOnly yes

# user2
Host user2
  HostName github.com
  User git
  IdentityFile ~/.ssh/user2
  IdentitiesOnly yes

来解释一下这些配置字段:

  • Host:SSH连接的别名,我们有多个账户,但为了方便起见我们可以将user1视为主号,这样我们可以直接配置Host github.com作为别名。在 github 仓库克隆ssh链接的时候,github.com就是默认的别名。
  • HostName:远程服务器的实际域名,显然我们需要统一设置为github.com
  • User:连接到远程服务器时使用的用户名,对于大多数Git服务器来说都使用git作为用户名,不建议修改这个字段。当然,你想修改也是可以的,最终的身份鉴别还是根据ssh密钥来处理的
  • IdentityFile:密钥文件路径(注意别填写成.pub结尾的公钥)
  • IdentitiesOnly:仅使用IdentityFile指定的配置文件密钥,忽略ssh-agent提供的密钥。

ssh-agent 是一个辅助程序,用于管理和缓存SSH私钥,它允许您在需要时轻松地通过缓存的密钥进行身份验证,而无需每次都手动输入密码。这在使用多个 SSH 密钥和连接到多个远程服务器时非常实用。

git 配置

在配置好github的公钥和ssh config的私钥后,我们继续配置git的内容。

首先,当我们再使用 GitGitHub 推送更改时,如果您没有在本地 Git 环境中设置全局用户名和电子邮件地址,就会出现配置全局用户信息的提示。这是因为 Git 需要知道在提交更改时应该使用哪个用户身份。我们可以配置一个全局的用户信息:

git config --global user.name "user1"
git config --global user.email "[email protected]"

配置了全局用户名和邮箱之后,在用主号操作github的仓库时就可以省去配置对应的用户信息。

并且结合之前的config配置,我们默认Host使用了github.com别名,那么我们就可以直接在github仓库下通过默认的ssh链接来克隆仓库了。

而如果我需要克隆另一个账户的代码,并且以另一个账户为身份去推送代码,那么就可以在复制githubssh链接时修改别名。

举个例子:

# 默认
git clone [email protected]:user2/test.git
# 修改别名为 ~/.ssh/config 的别名
git clone git@user2:user2/test.git

如此一来,克隆到本地的test仓库将会存在一个.git目录,此目录下的config文件就是仓库的git配置文件。

其内部会记录一个[remote "origin"]字段,其中的url将会保存好这个别名和仓库的归属人和仓库名信息。

为了让我们在这个项目下使用push等操作时能让git正确识别到所用的github账户。

我们可以执行一下命令:

 git config --local user.name "user2"
 git config --local user.email "[email protected]"

如此一来,git就会将这个仓库下推送代码等操作所使用的账户信息写到.git/config文件中。

最后,我们就可以随时在不同的仓库下使用我们想要的账户去提交代码了。

最后

因为笔者前几天创建了两个github的账户来做一些事情,才有这个需求。因此,查了一些参考的文档和文章,如果能帮到大家,也是一件好事。

📢:如果这个配置有什么错漏,欢迎指正。

参考

not-by-ainot-by-ai
文章推荐

Friends

Jimmy老胡SubmaraBruce SongScarsu