在我的机器上,我已经在 中设置了一个全局 git 用户~/.gitconfig
,其中包含我的私人详细信息:
[user]
name = ebosi
email = me@private-email.com
signingkey = 0123456789ABCDEF
Run Code Online (Sandbox Code Playgroud)
但是,我希望这些全局设置被某些特定存储库中的其他凭据(例如工作凭据)覆盖。在这种情况下,我编辑本地 git 配置(例如~/work/project/.git/config
),如下所示:
[user]
name = ebosi
email = ebosi@corporate.com
signingkey = FEDCBA9876543210
Run Code Online (Sandbox Code Playgroud)
我想使用正确的身份对我的提交进行 GPG 签名:默认为私有身份,除非在存储库配置中被覆盖。
但是,当我 时git commit -sS
,git 正确地获取了签核身份,但没有获取 gpg 密钥。要使用我的公司密钥签署提交,我需要git commit -s -SFEDCBA9876543210
如何让 git 自动选择正确的 gpg 密钥?
(即 if 存在中定义的签名密钥./.git/config
,否则 中定义的签名密钥~/.gitconfig
)
免责声明:这个答案广泛基于此处提供的 Kiss 教程(存档)。
\n\n解决我们的问题是通过基于项目路径有条件导入工作 git 配置设置来完成的。
\n\n这很简单:
\n\n创建一个新的 git 配置文件,例如~/.gitconfig_work
:
touch ~/.gitconfig_work\n
Run Code Online (Sandbox Code Playgroud)编辑它以定义 \xe2\x80\x9cwork\xe2\x80\x9d git config:
\n\n[user]\n name = ebosi\n email = ebosi@corporate.com\n signingkey = FEDCBA9876543210\n
Run Code Online (Sandbox Code Playgroud)有条件地从以下位置加载此文件~/.gitconfig
:
[user]\n name = ebosi\n email = me@private-email.com\n signingkey = 0123456789ABCDEF\n\n\xe2\x80\xa6\n\n[includeIf "gitdir:~/work/"]\n path = ~/.gitconfig_work\n
Run Code Online (Sandbox Code Playgroud)最后一步是聪明的一点:它告诉 git仅当存储库位于~/work/
工作目录(或任何它的子目录)。
注意:
\n\ngitdir
使用与文件中相同的语法指定.gitignore
path = ~/.gitconfig_work
将简单地扩展到工作配置文件中的内容,因此您也可以简单地进行.gitconfig
如下编辑:
[user]\n name = ebosi\n email = me@private-email.com\n signingkey = 0123456789ABCDEF\n\n[includeIf "gitdir:~/work/"]\n [user]\n name = ebosi\n email = ebosi@corporate.com\n signingkey = FEDCBA9876543210\n
Run Code Online (Sandbox Code Playgroud).gitconfig
是从上到下处理的,因此如果您想覆盖全局参数,请确保在默认配置之后导入新配置。以下内容(其中键按字母顺序排序)将不起作用:
[includeIf "gitdir:~/work/"]\n path = ~/.gitconfig_work\n\n[user]\n name = ebosi\n email = me@private-email.com\n signingkey = 0123456789ABCDEF \n
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
910 次 |
最近记录: |