如何配置 Git 以始终签署标签?

29

我使用的一些仓库要求所有标签都必须签名,有时候我会忘记在 git tag 命令中添加 -s 参数,甚至更糟糕的是,我使用了一个不知道标签的 git GUI 创建了标签。

有没有办法配置 GIT 使其始终签署标签?

我尝试将以下 hack 添加到 .gitconfig 中,但它没有任何效果,除非我在命令行中手动输入 -s,否则标签都没有签署。

[alias]
tag = tag -s

[tag]
forceSignAnnotated = true

[commit]
gpgsign = true

也许在配置文件中有一个类似于[commit][tag]选项? - evolutionxbox
在 Git 中有一个名为 HubFlow 的选项,可以在你完成分支后自动创建标签等。 - Jishnunand P K
1
请确保将 user.signingkey 添加到您的 git 配置中(gpg 密钥 ID)。例如:git config --global user.signingkey 0A1B2C3D - Bjoern Rennhak
alias.tag 无法工作,因为隐藏现有 Git 命令的别名将被忽略。 - ElpieKay
从 Git 2.23 (2019 年第三季度) 开始,尝试使用 git config tag.gpgSign true 命令! - VonC
3个回答

37

在Git 2.23(2019年第三季度)的更新中,现在你可以使用git config tag.gpgSign true了!


原始答案(2018年6月)

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

一旦您有一个用于签名的私钥,您可以通过设置user.signingkey配置设置来配置Git使用它来签署事物。

git config --global user.signingkey 0A46826A

默认情况下,使用git tag命令并使用默认签名模式(-s)将使用您的提交者身份(格式为Your Name <your@email.address>)来查找密钥。 如果您想使用不同的默认密钥,可以按以下方式在存储库配置中指定。
[user]
    signingKey = <gpg-keyid>

注意:如果您使用-m选项(tag -m "a comment" myTag)创建标签,则会使它们变为批注标签
来自git tag man page

如果给出了-m <msg>-F <file>并且未给出-a-s-u <keyid>,则暗示使用-a

所以你可以:
  • 不要为git tag定义别名(不要使用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

这将强制对注释标签进行签名,但您必须使用git tag -a创建注释标签,这与git tag -s并没有多大区别。

0

我不知道alias指令,但是你的[tag]和[commit]看起来是正确的,而且对我也有效。只要确保(就像Bjoern Rennhak说的那样),user.signingkey也被定义并使用了有效的密钥。还要检查你的git版本,因为'forceSignAnnotated'只在Git版本2.9.0及以上才可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接