管理多个 Git 身份:个人和工作账户的无缝工作流

发布: (2026年1月17日 GMT+8 03:24)
8 min read
原文: Dev.to

Source: Dev.to

请提供需要翻译的正文内容,我才能为您进行简体中文翻译。

介绍

我们都有过这样的经历:使用错误的身份推送代码(例如,用个人邮箱 coding_ninja1@gmail.com 提交与工作相关的代码)。

在同一台机器上管理多个 Git 身份是每个开发者的必经之路。无论你是在平衡开源项目与朝九晚五的工作,还是在为不同的自由职业客户服务,都很容易让你的职业身份交叉混淆,或者忘记自己此时戴着哪顶“帽子”。

在本文中,我将带你完成一次 两步演进,从根本上解决这个问题:

  1. SSH 基础 – 为不同平台(GitHub 与 Bitbucket)设置唯一的 SSH 密钥。这可以保证连接安全,但仍需手动为每个新仓库设置 user.email
  2. 秘密武器(Git 条件包含) – 让 Git 感知上下文,使你的机器能够根据所在文件夹自动切换姓名和邮箱。

阅读完本指南后,你将拥有一个 “设置一次,忘记它” 的系统,让你的职业工作保持职业化,个人项目保持个人化。

Step 1: The SSH Foundation

What is SSH?

SSH (Secure Shell) 是一种协议,能够让你的电脑在不安全的网络上与服务器进行安全通信。与每次推送代码时都输入用户名和密码不同,你可以使用 密钥对

  • Public key – 与 Bitbucket/GitHub 共享。
  • Private key – 保存在本机(绝不共享)。

1️⃣ Generate New SSH Keys

打开终端,为每个账号创建密钥(如果已有密钥可跳过)。

Work (Bitbucket)

ssh-keygen -t ed25519 -C "work.email@acme.com" -f ~/.ssh/id_ed25519_bitbucket

Personal (GitHub)

ssh-keygen -t ed25519 -C "personal.email@gmail.com" -f ~/.ssh/id_ed25519_github

当系统提示输入密码短语时,你可以填写,也可以留空。
这会生成 id_ed25519_bitbucket(以及对应的 .pub)和 id_ed25519_github(以及对应的 .pub)文件。

Why ed25519?

  • Security – 相比 RSA,使用更小的密钥长度即可提供更高的安全级别。
  • Performance – 生成和验证速度更快,使 Git 操作更流畅。
  • Collision resistance – 在数学上对某些攻击具有更强的抗碰撞能力。

2️⃣ Configure Your SSH config File

~/.ssh/config 文件充当流量控制器。Git 在与 GitHub 或 Bitbucket 通信时会自动挑选正确的密钥。

# Personal Account (GitHub)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github

# Work Account (Bitbucket)
Host bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/id_ed25519_bitbucket

使用 nano ~/.ssh/config(或你喜欢的编辑器)打开(或创建)该文件,并粘贴上面的内容。

3️⃣ Add the Public Keys to Their Platforms

GitHub

# Show the public key
cat ~/.ssh/id_ed25519_github.pub
  1. 复制输出内容。
  2. 登录 GitHub → SettingsSSH and GPG keysNew SSH key
  3. 粘贴密钥并保存。

Bitbucket

cat ~/.ssh/id_ed25519_bitbucket.pub
  1. 复制输出内容。
  2. 登录 Bitbucket → Personal SettingsSSH KeysAdd key
  3. 粘贴密钥并保存。

4️⃣ Clone and Set Up Local Identity

Global (default) Identity

大多数开发者会把 个人 账号设为全局默认,这样副项目可以直接使用:

git config --global user.email "personal.email@gmail.com"

你创建或克隆的每个仓库都会默认使用该邮箱 除非在本地覆盖

Local Override for a Work Repository

  1. 克隆仓库,使用 SSH URL(配置文件会自动挑选正确的密钥):

    git clone git@bitbucket.org:acme-corp/project-alpha.git
  2. 在克隆得到的仓库中 设置本地身份

    cd project-alpha
    git config user.name "Your Name"
    git config user.email "work.email@acme.com"

此后该仓库的提交会使用工作邮箱,而其他仓库仍使用个人邮箱。

手动负担

上述方法可行,但有一个问题:你必须记得对每一个克隆的工作仓库都运行 git config 命令。如果忘记这一步,就会不小心用错误的邮箱提交。

指南的下一部分(“秘密配方”)将向你展示如何使用 Git 的条件包含来实现自动化,彻底消除手动步骤。敬请期待!

Source:

Git 条件包含

“你最终会用个人的‘默认基础’电子邮件推送专业代码。”

注意: 这正是我们使用 条件包含 的原因——让此切换自动完成,这样你再也不需要手动处理。

步骤 2:Git 条件包含

现在你的电脑可以在 GitHubBitbucket 之间“对话”,而无需输入密码。不过仍然有一个主要问题:SSH 负责连接,但 Git 负责名称。即使你使用 工作 SSH 密钥 推送到 Bitbucket,Git 仍可能因为全局设置而用 personal_email@gmail.com 标记你的提交。

让我们用秘密武器来解决:Git 条件包含

目标

自动化你的身份信息,这样你再也不需要输入 git config user.email。这是一种 “设置后忘记它” 的策略。通过使用条件包含,你告诉 Git:

如果我在我的工作文件夹内工作,自动将我的身份切换为 Acme 邮箱。

这可以防止因不小心使用个人邮箱而推送工作提交的常见错误。

设置(一步一步)

1. 整理文件夹

确保你的项目按目录分开,例如:

  • ~/Documents/Personal/ – 所有个人的文件或项目
  • ~/Documents/Work/ – 所有工作的文件或项目

2. 创建 “仅工作” 配置文件

nano ~/Documents/Work/.gitconfig-work

将以下内容粘贴到 .gitconfig-work 中:

[user]
    name = Your Name
    email = work.email@acme.com

保存并退出(Ctrl+OEnterCtrl+X)。

3. 在全局配置中链接 “仅工作” 配置文件

nano ~/.gitconfig

在文件最底部添加以下逻辑:

# Default/Personal Identity
[user]
    name = Your Name
    email = personal.email@gmail.com

# Conditional Include: If the path starts with ~/Documents/Work/
[includeIf "gitdir:~/Documents/Work/"]
    path = ~/Documents/Work/.gitconfig-work

保存并退出。

工作原理

当你运行 Git 命令时,Git 会检查你当前的目录:

  • 如果你在 ~/Documents/Personal/repo,它使用全局邮箱。
  • 如果你在 ~/Documents/Work/acme-projectincludeIf 触发器会被激活,并 覆盖 全局邮箱,使用 .gitconfig-work 中定义的邮箱。

验证设置

  1. 进入 Work 文件夹中的一个仓库。

  2. 运行:

    git config user.email

    应该输出 work.email@acme.com

  3. 移动到 “Work” 之外的文件夹并再次运行相同的命令。
    应该输出你的个人邮箱。

结论

通过结合 SSH Config(用于安全访问)和 Conditional Includes(用于自动身份),您已经构建了专业级的开发环境。再也不会出现意外提交,也不会出现“未识别用户”错误,并且新仓库无需手动设置。

Back to Blog

相关文章

阅读更多 »

Git 与 GitHub 入门指南

介绍 在软件开发的世界中,版本控制是必不可少的。Git 是一种版本控制工具,帮助你跟踪代码的更改,...

Git 和 GitHub 入门

探索新的学习曲线和机会并不是我曾想过在2026年会去做的事。在这篇文章中,我分享了我在第一周学到的经验……