如何将脚本输出作为.gitconfig中commit.gpgsign的取值?
解决Git仅在Yubikey存在时签名提交的问题
你原来的配置方法无效,因为Git的commit.gpgsign是布尔型配置项,只能识别true/false这类字面量,无法直接执行外部脚本获取值,所以!/path/to/yubikey-present.sh``会被当成无效的字符串值,导致报错。
下面是两种可行的解决方案:
方案一:利用Git条件包含+环境变量
在你的shell配置文件(比如
~/.bashrc或~/.zshrc)中添加以下内容,用于检测Yubikey并设置环境变量:if /path/to/yubikey-present.sh; then export GIT_COMMIT_GPGSIGN=true else export GIT_COMMIT_GPGSIGN=false fi保存后执行
source ~/.bashrc(或对应的配置文件)使设置生效。修改
~/.gitconfig,添加条件包含规则:[commit] gpgsign = false [includeIf "env:GIT_COMMIT_GPGSIGN=true"] path = ~/.gitconfig-yubikey-sign创建
~/.gitconfig-yubikey-sign文件,内容如下:[commit] gpgsign = true这样当Yubikey存在时,Git会加载额外配置开启签名;不存在则保持默认不签名。
方案二:用Git别名包装commit命令
直接在~/.gitconfig中添加别名,覆盖默认的commit命令:
[alias] commit = "!f() { if /path/to/yubikey-present.sh; then git commit -S \"$@\"; else git commit \"$@\"; fi; }; f"
之后每次执行git commit时,脚本会自动检测Yubikey:存在则用-S参数签名提交,否则正常提交。
内容的提问来源于stack exchange,提问作者jwir3
相关产品推荐
相关产品推荐

