如何配置 Git 始终对标签进行签名?

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

我使用的存储库很少需要对所有标签进行签名,有时我忘记将

-s
添加到
git tag
,或者更糟糕的是,我使用不了解标签的 Git GUI 创建标签。

有没有办法配置 Git 始终对标签进行签名?

我尝试将以下 hack 添加到

.gitconfig
但它没有任何效果,标签是在没有签名的情况下创建的,除非我在 CLI 中手动提及
-s

[alias]
tag = tag -s

[tag]
forceSignAnnotated = true

[commit]
gpgsign = true
git git-config git-tag
3个回答
40
投票

Git 2.23 更新(2019 年第 3 季度),您现在拥有

git config tag.gpgSign true


原始答案(2018年6月)

虽然 git 标签没有“默认签名”模式,但 文档提到

一旦有了可供签名的私钥,您就可以通过设置 user.signingkey 配置设置来配置 Git 使用它来签名。

git config --global user.signingkey 0A46826A

默认情况下,默认签名模式 (

git tag
) 下的
-s
将使用您的提交者身份(格式为
Your Name <[email protected]>
)来查找密钥。
如果您想使用不同的默认密钥,您可以在存储库配置中指定它,如下所示:

[user]
    signingKey = <gpg-keyid>

注意:如果您使用

-m
选项 (
tag -m "a comment" myTag
) 创建标签,则会使它们带注释

来自

git tag
手册页

如果给出了

-m <msg>
-F <file>
并且缺少
-a
-s
-u <keyid>
,则暗示为
-a

所以你可以:

  • not 为 git 标签定义别名(不是
    add -s
  • 从终端设置
    git config tag.forceSignAnnotated true

这样,任何

git tag -m "a comment" myTag
都会触发 gpgpSign。
仅适用于带注释的标签,但由于这些标签不仅应该位于您的存储库本地,而且还应该推送,所以应该足够了。


5
投票
[alias]
tag = tag -s

您不能使用别名覆盖内置命令。使用不同的 别名名称:

[alias]
stag = tag -s

至于

[tag]
forceSignAnnotated = true

这会强制对 annotated 标签进行签名,但您必须创建 带

git tag -a
的注释标签并不比
git tag -s
好多少。


0
投票

我不知道别名指令,但你的 [tag] 和 [commit] 似乎是正确的,这些对我有用。只需确保(像 Bjoern Rennhak 一样)说 user.signingkey 也已定义并使用有效密钥。另请检查您的 git 版本,因为“forceSignAnnotated”仅在 Git 版本 2.9.0 中可用。

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