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

问题描述 投票:0回答:5

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

问题是每次我想提交到不同的 git 存储库时,我都必须执行

git config --global user.signingkey

有没有办法可以管理每个 git 用户的 gpg 密钥?

git gpg-signature
5个回答
36
投票

我也有同样的情况,但工作/个人账户分开。我有很多存储库,但我不想每次克隆新内容时都运行

git config

我已经写了一篇关于它的博客文章。自动执行此操作的一种方法是使用 git 提供的

includeIf
指令。您可以从 git 手册中的Conditional Include部分阅读更多相关信息。


不过有一个小要求,您需要能够通过路径中的组件区分 github 存储库和 GitLab 存储库(例如,将 GitHub 克隆放在

~/github
中,将 Gitlab 克隆放在
~/gitlab
中)

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

# config.github
[user]
  name       = Chakrit
  email      = [email protected]
  signingkey = DEADBEEF

# config.gitlab
[user]
  name       = Chakrit
  email      = [email protected]
  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
文件夹中的所有存储库将自动使用您的 GitHub 密钥,并且
~/gitlab
文件夹中的存储库将使用您的 GitLab 密钥。


5
投票

可以为每个存储库设置签名密钥,只需从签出的存储库中执行:

git config user.signingkey
。此命令设置存储库的
.git/config
中的配置。
--global
选项会导致配置被写入
~/.gitconfig
,其中它成为未设置本地值的存储库的默认配置。

更多信息可以在

git-config
的手册页的 user.signingKey 部分找到。

您还可以通过将

user.email
设置为与存储库关联的电子邮件来获得更好的结果。


5
投票

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

user.signingkey
设置即可。

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


1
投票

我会改进@chakrit的答案,但编辑队列已经满了一段时间......

我更喜欢与文件系统无关的方法,并根据远程 Git 主机 URL 加载正确的配置:

[includeIf "hasconfig:remote.*.url:**/github.com*/**"]
    path = config.github

0
投票

对于使用

hasconfig:remote.*.url:
的人,请确保您使用的 git 版本 > 2.36。仅从该版本开始支持该功能

© www.soinside.com 2019 - 2024. All rights reserved.