配置多 Git Remote 仓库的 SSH ,Git 用户和邮箱自动切换

语言: CN / TW / HK

theme: cyanosis

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

在开发中,我们经常需要同时使用多个 Git 远程仓库来管理代码,这些仓库可能 Github 仓库以及 Gitee 的仓库。在这些仓库中,为了保障代码的安全性和可追溯性,我们通常使用 SSH 协议来进行认证。

本文将介绍如何配置多个 Git 远程仓库的 SSH 认证,并根据文件路径自动选择相应的 Git 用户和 Git 邮箱。

配置 SSH Key

在添加远程仓库时,我们可以使用 SSH 协议来进行连接。

  1. 生成 SSH 密钥

我们可以使用 ssh-keygen 命令生成 SSH 密钥,如果已经生成过 SSH 密钥,可以跳过这一步。

shell ssh-keygen -t rsa -b 4096 -C "[email protected]"

  1. 将 SSH 公钥添加到远程仓库

在添加远程仓库时,我们可以将生成的 SSH 公钥添加到远程仓库的设置中,这样就可以使用 SSH 协议连接远程仓库。具体方法可以 Github 或 Gitlab 这类的文档。

  1. 配置 SSH

我们需要在本地配置 SSH,以便 Git 可以使用 SSH 协议连接远程仓库。可以通过编辑 ~/.ssh/config 文件来配置 SSH。

下面是一个示例配置:

```shell

GitHub

Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_github

Gitee

Host gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_gitee ```

上面的配置中,我们为 GitHub 和 Gitee 配置了 SSH。其中,Host 是我们为远程仓库指定的别名,HostName 是远程仓库的地址,IdentityFile 是 SSH 密钥的路径。

4.用 ssh 命令分别测试连通性。

ssh ssh -T [email protected] ssh -T [email protected]

配置 Git

接下来,我们需要为每个 Git 仓库配置 Git 用户和 Git 邮箱。我们可以使用以下命令来配置 Git 用户和 Git 邮箱:

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

这些命令将全局设置 Git 用户和 Git 邮箱,如果我们需要为特定的 Git 仓库设置不同的 Git 用户和 Git 邮箱,可以使用以下命令:

```bash

/path/to/repository 为仓库路径

cd /path/to/repository git config user.name "Brian Yao" git config user.email "[email protected]" ```

配置 Git 远程仓库

现在,我们已经为每个 Git 仓库配置了 SSH Key、Git 用户和 Git 邮箱。接下来,我们需要为每个 Git 仓库配置远程仓库的地址和名称。我们可以使用以下命令来添加远程仓库:

```bash

/path/to/repository 为仓库路径

cd /path/to/repository git remote add origin [email protected]:username/repo.git ```

其中,origin 是远程仓库的名称,[email protected]:username/repo.git 是远程仓库的 SSH 地址。


自动选择 Git 用户和 Git 邮箱

在我们使用多个 Git 远程仓库时,通常需要使用不同的 Git 用户和 Git 邮箱来进行代码提交。为了方便起见,我们可以根据文件路径来自动选择相应的 Git 用户和 Git 邮箱。

假设我们将 Github 项目放在 github 文件夹下,将 Gitee 项目放在 gitee 文件夹下。我们可以使用以下方式来自动选择相应的 Git 用户和 Git 邮箱:

使用 includeIf 功能,我们可以在 ~/.gitconfig 文件中为不同的文件夹路径配置不同的 Git 用户和 Git 邮箱。例如,我们可以添加以下配置:

```ssh [user] name = Brian email = [email protected]

[includeIf "gitdir:~/github/"] path = ~/.gitconfig-github

[includeIf "gitdir:~/gitee/"] path = ~/.gitconfig-gitee ```

其中,[user] 部分是全局的 Git 用户和 Git 邮箱配置,[includeIf] 部分用于针对不同的文件夹路径进行 Git 用户和 Git 邮箱配置。在上述例子中,~/.gitconfig-github~/.gitconfig-gitee 文件中分别包含了 Github 和 Gitee 项目的 Git 用户和 Git 邮箱配置。

~/.gitconfig-github 中,我们可以添加以下配置:

ssh [user] name = Brian email = [email protected]

这将覆盖全局的 Git 用户和 Git 邮箱配置,并将 Github 项目的代码提交到指定的 Git 用户和 Git 邮箱。

~/.gitconfig-gitee 中,我们可以添加以下配置:

ssh [user] name = Brian email = [email protected]

这将覆盖全局的 Git 用户和 Git 邮箱配置,并将 Gitee 项目的代码提交到指定的 Git 用户和 Git 邮箱。

通过使用 includeIf 功能,我们可以将不同的 Git 用户和 Git 邮箱配置分离到不同的配置文件中,从而提高配置的可维护性和可扩展性。并且使用 includeIf 功能的方式更加轻量级,不会对 Git 的性能产生影响。

注意:上文配置中gitdir:~/gitee/,不要有空格。

最后

通过本文的介绍,相信你已经了解了如何在开发过程中使用多个 Git 远程仓库,为每个仓库配置不同的 SSH 密钥,并且根据文件路径自动切换 Git 用户和 Git 邮箱。 希望本篇能帮助你提高开发效率,以及更好的使用 Git。