Git 多账户配置及按项目路径使用不同 Git 配置

status
Published
type
Post
slug
multiple-git-identities-config
date
Sep 4, 2024
tags
Git
Config
Note
summary
文章介绍了在 macOS 上配置多个 Git 账户的方法,主要包括生成 SSH 密钥、将公钥添加到 Git 服务端、配置 SSH Agent 以及在 .gitconfig 文件中使用条件包含(Conditional Includes)来按项目路径使用不同的 Git 配置。通过这些步骤,用户可以在同一台电脑上方便地管理多个 Git 账户。

背景

最近使用 Git 时,因为涉及到多个项目,对应着也有多个 Git 账户。每次切换项目目录后都需要重新配置Git 用户名和邮箱就显得很麻烦。下面是配置多 Git 账户的简单记录,操作系统为 macOS。

配置多个 Git 账户

配置 Git 账户 SSH 密钥

此处以 GitHub 账户为例,其他 Git 服务或自建 Git 私服操作与此类似,不做赘述。
  • 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your_email_1@example.com" -f ~/.ssh/id_ed25519_account1
 
  • 将公钥添加到 Git 服务端
登录到GitHub账户。
  1. 登录 GitHub 账户,导航到 Settings -> SSH and GPG keys
  1. 点击 New SSH key 按钮,将生成的公钥(例如 ~/.ssh/id_ed25519_account1.pub)内容粘贴进去。
 
  • 将 SSH 密钥添加到 SSH Agent
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519_account1
👆 两行代码解释如下展开查看
eval "$(ssh-agent -s)":这行命令是启动ssh-agent。ssh-agent是一个程序,用于保存私钥和公钥,当你需要使用这些密钥进行SSH连接时,ssh-agent可以为你提供这些密钥。eval是一个shell命令,用于执行后面的命令并返回结果。$(ssh-agent -s)会启动ssh-agent并返回一些设置环境变量的命令,eval会执行这些命令,以便后续的命令可以找到ssh-agent。
 
ssh-add ~/.ssh/id_ed25519_account1:这行命令是将私钥~/.ssh/id_ed25519_account1添加到ssh-agent中。这样,当你需要使用这个私钥进行SSH连接时,就不需要每次都输入私钥的密码了,ssh-agent会自动为你提供这个私钥。
 
对要添加的每个 GitHub 帐户重复上面这些步骤,执行命令时将不同账户的 SSH 密钥文件名区分开替换。

配置 SSH Git Host

编辑 ~/.ssh/config 文件,为每个账户分别添加对应的配置块,内容示例如下:
Host github.com-Account1 HostName github.com User git IdentityFile ~/.ssh/id_ed25519_account1 Host github.com-Account2 HostName github.com User git IdentityFile ~/.ssh/id_ed25519_account2

测试 Git 配置

ssh -T git@github.com-Account1 ssh -T git@github.com-Account2

克隆 Git 仓库

  • 新仓库
git clone git@github.com-Account1:your_username/your_repository.git
  • 已有仓库
# 查看现有关联的远端仓库 URL git remote -v # 修改为上面配置的 Host git remote set-url origin git@github.com-Account1:your_username/your_repository.git
  • 配置 Git 命令别名
git config --global alias.clone-account1 'clone git@github.com-Account1' # 之后克隆仓库可执行 git clone-account1:your_username/your_repository.git

按项目路径使用不同 Git 配置

在之前的操作中已经配置了多个 Git 账户,在使用时虽然可以为每个 Git 项目单独配置用户名和邮箱,但这样做每次切换项目都需要重新配置一次就显得很麻烦。
经过搜索查找发现 Git 从 2.13 版本开始就引入了一项新功能 Conditional Includes,可以实现对不同路径下的仓库引用不同 gitconfig 的功能。

.gitconfig 文件

Git 的全局默认配置文件是 ~/.gitconfig。如果之前曾执行过git config user.name "Git" 等命令,相应的配置参数就会存储在这个文件中,示例如下:
[user] name = git email = your_email@example.com
将原有的 .gitconfig 重命名或备份起来。

使用 includeIf 条件配置

假定当前项目目录如下:
/Users/okhk/git ├── account1 │ ├── foo-api │ ├── foo-web │ └── foo-proxy └── account2 ├── bar-backend └── bar-frontend
我们可以编辑 .gitconfig 文件,通过 includeIf 有条件地包含其他配置文件,配置内容示例如下:
[includeIf "gitdir:~/git/account1"] path = ~/.gitconfig-account1 [includeIf "gitdir:~/git/account2"] path = ~/.gitconfig-account2
此时 Git 会根据项目路径分别使用不同的 git 配置,我们还需要分别创建 ~/.gitconfig-account1~/.gitconfig-account2 ,各自内容示例如下:
~/.gitconfig-account1
[user] name = git email = your_email_1@example.com
~/.gitconfig-account2
[user] name = git email = your_email_2@example.com

完成以上配置后,我们就可以愉快地在同一台电脑上使用多个 Git 账户了。

参考信息