我有三个不同的Git服务提供商的帐户- GitHub, GitLab和BitBucket。我想确保我的提交是通过SSH在所有提到的提供程序中签署的,这是不可能的,因为我现在已经分配了一个GitLab电子邮件,我所有的帐户都使用唯一的电子邮件。这只验证GitLab的签名提交是否成功。我如何使它使GitHub/BitBucket存储库将分配到各自的电子邮件?
我没有在网上找到任何关于这个的东西。有一个"礼物"。方法,但我不是在寻找这个。我希望Git理解我使用的主机(如果在GitHub上,使用abc@gmail.com,如果在GitLab上,使用pqr@outlook.com等等),并基于此分配电子邮件。
Git允许您通过以下命令设置本地存储库克隆中新提交的默认电子邮件地址:
$ git config --local user.email "myemail@whereever.org"
因此,只要您的任何给定的本地存储库只推送到给定的托管服务,那么您应该能够为提交分配适当的电子邮件。
这样回答你的问题了吗?
不幸的是,Git配置不直接支持条件,但包含其他配置文件。我能够通过使用hasconfig:remote.*.url
条件includeIf
来解决我的问题。您可以删除[user]
块下的电子邮件变量-这是您的全局电子邮件。为此创建四个新块(每个远程两个—一个用于HTTPS,一个用于SSH)。以下是我的.gitconfig
文件的示例:
.gitconfig
[user]
name = <Your name>
[includeIf "hasconfig:remote.*.url:git@github.com:**/**"]
path = github
[includeIf "hasconfig:remote.*.url:https://github.com/**/**"]
path = github
[includeIf "hasconfig:remote.*.url:git@gitlab.com:**/**"]
path = gitlab
[includeIf "hasconfig:remote.*.url:https://gitlab.com/**/**"]
path = gitlab
[init]
defaultBranch = main
[core]
editor = vim
[color]
ui = auto
[gpg]
format = ssh
[commit]
gpgsign = true
现在为各自的远程创建配置文件。我已经在与.gitconfig
相同的目录下创建了.github
和.gitlab
:
.github
[user]
email = secret-email@github.com
signingkey = ~/.ssh/github-key.pub
.gitlab
[user]
email = secret-email@gitlab.com
signingkey = ~/.ssh/gitlab-key.pub
编辑1:最初,有三个不同的配置,一个用于GitHub, GitLab和Bitbucket,为了简单起见,我删除了Bitbucket。