Git 技巧:为不同项目配置专属用户信息与 SSH 密钥

在日常开发中,我们可能需要同时维护个人项目和工作项目,它们需要使用不同的 Git 用户信息(用户名、邮箱)和 SSH 密钥进行提交与推送。本文将介绍两种核心方法,帮你优雅地管理多个 Git 身份。

首先,我们需要了解 Git 的全局配置,这是所有仓库的默认设置。

1
2
3
# 设置全局默认的用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

查看信息

1
2
git config user.name
git config user.email

配置不同的提交作者 (Commit Author)

这部分设置仅影响 git commit 时记录的作者信息。

场景 A:为单个项目设置(简单直接)

如果你只是偶尔需要为某个特定项目使用不同的用户信息,最简单的方法是在该项目目录下执行 git config 命令,它会创建或修改项目内的 .git/config 文件,且优先级高于全局配置。

1
2
3
4
5
6
# 进入你的项目目录
cd /path/to/your/project

# 为此项目单独设置用户名和邮箱
git config user.name "Work Name"
git config user.email "[email protected]"

场景 B:为特定目录自动切换(一劳永逸)

如果你希望某个目录(如 ~/work/)下的所有 Git 仓库都自动使用同一套用户信息,可以使用 Git 2.13 版本引入的 includeIf 功能,实现智能切换。

第一步:创建专属配置文件

为你的工作身份创建一个独立的配置文件,例如 ~/.gitconfig-work

1
2
3
4
# ~/.gitconfig-work 文件内容
[user]
name = Work Name
email = [email protected]

第二步:修改主配置文件

编辑你的全局 Git 配置文件 ~/.gitconfig,添加 includeIf 指令。它会判断当前仓库是否在你指定的目录下,如果是,则加载对应的配置文件。

1
2
3
# ~/.gitconfig 文件末尾添加
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
  • gitdir:~/work/:表示该规则适用于 ~/work/ 目录及其所有子目录。路径末尾的 / 很重要。
  • path = ~/.gitconfig-work:指定需要加载的配置文件路径。

设置完成后,所有位于 ~/work/ 目录下的项目都会自动使用 Work Name 作为提交者。

使用不同的 SSH 密钥 (Push Authentication)

user.nameuser.email 只影响提交记录,而推送到远程仓库(如 GitHub、GitLab)的身份验证则依赖于 SSH 密钥。如果你需要向不同账号下的仓库推送代码,就需要配置多个 SSH 密钥。

第一步:编辑 SSH 配置文件

打开或创建 ~/.ssh/config 文件,为不同的 Git 服务账号设置别名:

1
2
3
4
5
6
7
8
9
10
11
12
# 默认 GitHub 个人账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

# 工作用 GitHub 账号
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
IdentitiesOnly yes
  • Host github.com-work:定义一个别名,后续在 Git 远程地址中使用。
  • IdentityFile ~/.ssh/id_rsa_work:指定该别名使用的私钥文件。

第二步:测试 SSH 连接

执行以下命令,测试新配置的 SSH 连接是否成功。

1
2
3
ssh -T [email protected]
# 如果成功,你会看到类似信息:
# Hi work-username! You've successfully authenticated...

第三步:修改项目远程仓库地址

进入需要使用工作密钥的项目,修改其远程仓库(origin)的 URL,将 github.com 替换为刚才设置的别名 github.com-work

1
2
3
4
5
6
7
# 查看当前的远程地址
git remote -v
# origin [email protected]:work-org/project.git (fetch)
# origin [email protected]:work-org/project.git (push)

# 修改远程地址
git remote set-url origin [email protected]:work-org/project.git

如何验证配置

如果你不确定当前项目最终生效的配置是什么,可以使用以下命令查看,它会清晰地展示配置项的来源。

1
2
3
4
# 查看所有生效的配置及其来源文件
git config --list --show-origin

# 按 'q' 键退出

总结

  • git config user.name/email:决定了提交了代码(作者信息)。
  • ~/.ssh/configgit remote:决定了你以什么身份推送到远程仓库(认证信息)。

通过组合使用 includeIf 和 SSH config,你可以轻松实现个人与工作环境的无缝隔离,让 Git 管理更加高效和专业。