管理多个 Git 身份:个人和工作账户的无缝工作流
Source: Dev.to
请提供需要翻译的正文内容,我才能为您进行简体中文翻译。
介绍
我们都有过这样的经历:使用错误的身份推送代码(例如,用个人邮箱 coding_ninja1@gmail.com 提交与工作相关的代码)。
在同一台机器上管理多个 Git 身份是每个开发者的必经之路。无论你是在平衡开源项目与朝九晚五的工作,还是在为不同的自由职业客户服务,都很容易让你的职业身份交叉混淆,或者忘记自己此时戴着哪顶“帽子”。
在本文中,我将带你完成一次 两步演进,从根本上解决这个问题:
- SSH 基础 – 为不同平台(GitHub 与 Bitbucket)设置唯一的 SSH 密钥。这可以保证连接安全,但仍需手动为每个新仓库设置
user.email。 - 秘密武器(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
- 复制输出内容。
- 登录 GitHub → Settings → SSH and GPG keys → New SSH key。
- 粘贴密钥并保存。
Bitbucket
cat ~/.ssh/id_ed25519_bitbucket.pub
- 复制输出内容。
- 登录 Bitbucket → Personal Settings → SSH Keys → Add key。
- 粘贴密钥并保存。
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
-
克隆仓库,使用 SSH URL(配置文件会自动挑选正确的密钥):
git clone git@bitbucket.org:acme-corp/project-alpha.git -
在克隆得到的仓库中 设置本地身份:
cd project-alpha git config user.name "Your Name" git config user.email "work.email@acme.com"
此后该仓库的提交会使用工作邮箱,而其他仓库仍使用个人邮箱。
手动负担
上述方法可行,但有一个问题:你必须记得对每一个克隆的工作仓库都运行 git config 命令。如果忘记这一步,就会不小心用错误的邮箱提交。
指南的下一部分(“秘密配方”)将向你展示如何使用 Git 的条件包含来实现自动化,彻底消除手动步骤。敬请期待!
Source: …
Git 条件包含
“你最终会用个人的‘默认基础’电子邮件推送专业代码。”
注意: 这正是我们使用 条件包含 的原因——让此切换自动完成,这样你再也不需要手动处理。
步骤 2:Git 条件包含
现在你的电脑可以在 GitHub 和 Bitbucket 之间“对话”,而无需输入密码。不过仍然有一个主要问题: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+O、Enter、Ctrl+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-project,includeIf触发器会被激活,并 覆盖 全局邮箱,使用.gitconfig-work中定义的邮箱。
验证设置
-
进入 Work 文件夹中的一个仓库。
-
运行:
git config user.email应该输出
work.email@acme.com。 -
移动到 “Work” 之外的文件夹并再次运行相同的命令。
应该输出你的个人邮箱。
结论
通过结合 SSH Config(用于安全访问)和 Conditional Includes(用于自动身份),您已经构建了专业级的开发环境。再也不会出现意外提交,也不会出现“未识别用户”错误,并且新仓库无需手动设置。