管理 2 git 个用户 gpg 密钥并为每个用户选择 gpg 签名

manage 2 git users gpg key and choose gpg sign per user

我有 1 个 github 用户和另一个 gitlab 用户,我为每个用户创建了 1 个 gpg 密钥,因为我的电子邮件地址不同。

问题是每次我想提交不同的 git 回购时我都必须执行 git config --global user.signingkey

有什么方法可以管理每个 git 用户的 gpg 密钥?

签名密钥可以按存储库设置,只需在签出的存储库中执行:git config user.signingkey。此命令设置存储库 .git/config 中的配置。 --global 选项导致配置被写入 ~/.gitconfig,它成为没有本地值集的存储库的默认值。

更多信息可以在 git-config 手册页的 user.signingKey 部分找到。

您还可以通过将 user.email 设置为与存储库关联的电子邮件来获得更好的结果。

我遇到了同样的情况,但拆分了 work/personal 个帐户。我有很多存储库,但我不想 运行 git config 每次克隆新的东西时。

我在 git 手册中写了 a blog post about it. A way to do this automatically is to use the includeIf directive provided by git. You can read more about it from the Conditional Include 部分。


虽然有一个小要求,您需要能够通过路径中的组件区分 github 存储库和 gitlab 存储库(例如,将 github 克隆放在 ~/github 中,将 gitlab 克隆放在 ~/gitlab 中)

然后,基本上,将签名密钥配置拆分为两个文件:

# config.github
[user]
  name       = Chakrit
  email      = github@example.com
  signingkey = DEADBEEF

# config.gitlab
[user]
  name       = Chakrit
  email      = gitlab@example.com
  signingkey = BADC0FFEE

然后在你的主要 ~/.config/git/config 配置文件中,使用 includeIf gitdir: 指令根据你的 WD 匹配和包含不同的文件:

# when working with github
[includeIf "gitdir:**/github/**/.git"]
  path = config.github

# when working with gitlab
[includeIf "gitdir:**/gitlab/**/.git"]
  path = config.gitlab

然后您 ~/github 文件夹中的所有回购将自动使用您的 git 集线器密钥,您 ~/gitlab 文件夹中的所有回购将使用您的 git 实验室密钥。

只需从您的存储库和全局设置中删除所有 user.signingkey 设置。

git 将决定使用 gpg 中的密钥,其身份与您的存储库中的 user.email 设置相匹配。