我有 1 个 github 用户和另一个 gitlab 用户,并且我为每个用户创建了 1 个 gpg 密钥,因为我的电子邮件地址不同。
问题是每次我想提交到不同的 git 存储库时,我都必须执行
git config --global user.signingkey
。
有没有办法可以管理每个 git 用户的 gpg 密钥?
我也有同样的情况,但工作/个人账户分开。我有很多存储库,但我不想每次克隆新内容时都运行
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 密钥。
可以为每个存储库设置签名密钥,只需从签出的存储库中执行:
git config user.signingkey
。此命令设置存储库的 .git/config
中的配置。 --global
选项会导致配置被写入 ~/.gitconfig
,其中它成为未设置本地值的存储库的默认配置。
更多信息可以在
git-config
的手册页的 user.signingKey 部分找到。
您还可以通过将
user.email
设置为与存储库关联的电子邮件来获得更好的结果。
只需从您的存储库和全局设置中删除所有
user.signingkey
设置即可。
git
将决定在 gpg
中使用与您的存储库中的 user.email
设置相匹配的身份的密钥。
我会改进@chakrit的答案,但编辑队列已经满了一段时间......
我更喜欢与文件系统无关的方法,并根据远程 Git 主机 URL 加载正确的配置:
[includeIf "hasconfig:remote.*.url:**/github.com*/**"]
path = config.github
对于使用
hasconfig:remote.*.url:
的人,请确保您使用的 git 版本 > 2.36。仅从该版本开始支持该功能