git for-each-ref --format='%(refname) %(signature)' refs/tags | python re-sign-tags.py
^^^^^^^^^^^^
(new with Git 2.42)
型 和re-sign-tags.py
import sys
import subprocess
def verify_tag(refname, signature):
grade = signature.split(":")[1]
if grade == "good":
print("Tag '%s' is signed with a good signature." % refname)
else:
print("Tag '%s' is signed with a bad signature." % refname)
def re_sign_tag(refname, signature):
signer = signature.split(":")[1]
print("Re-signing tag '%s' with key '%s'." % (refname, signer))
subprocess.run(["git", "tag", "-f", refname, refname, "-s"], check=True)
if __name__ == "__main__":
for refname, signature in sys.stdin:
if refname.startswith("refs/tags/"):
if verify_tag(refname, signature):
re_sign_tag(refname, signature)
2条答案
按热度按时间j8yoct9x1#
不,您需要:
字符串
型
正如mrts在评论中添加的那样,由于标签已经被推送:
您还需要使用
git push origin <tag_name> -f
强制推送更新 * 标签从Git 2.42(2023年第3季度)开始,您可以只签署需要它的标签,使用:
型
和
re-sign-tags.py
型
在Git 2.42(2023年第三季度)中,“
git for-each-ref
”(man)系列命令学习了与GPG签名验证相关的占位符。参见commit 26c9c03,commit 2f36339(2023年6月4日)by Kousik Sanagavarapu (
five-sh
)。(由Junio C Hamano --
gitster
--合并于commit 81ebc54,2023年7月14日)ref-filter
:添加新的“签名”原子共同撰写人:哈里翁·维尔马
共同撰写人:杰迪普·达斯
共同撰写人:恩森吉尤姆瓦·威尔伯福斯
指导人:克里斯蒂安·库德
指导人:哈里翁·维尔马
签收人:库西克·萨纳加瓦拉普
复制pretty中的ref-filter中用于输出commits和tags的签名和其他参数的代码。
在未来,这将有助于摆脱当前到处都是这种逻辑的重复实现,当ref-filter可以做pretty正在做的一切时。
新的atom“签名”及其朋友相当于现有的pretty格式,如下所示:
型
git for-each-ref
现在在其手册页中包括:signature
提交的GPG签名。
signature:grade
显示“G”表示良好(有效)签名,“B”表示不良签名,“U”表示有效性未知的良好签名,“X”表示已过期的良好签名,“Y”表示由过期密钥制作的良好签名,“R”表示由已撤销密钥制作的良好签名,“E”表示签名无法检查(例如,如果无法检查)。缺少密钥)和“N”表示没有签名。
signature:signer
提交的GPG签名的签名者。
signature:key
提交的GPG签名的密钥。
signature:fingerprint
提交的GPG签名的指纹。
signature:primarykeyfingerprint
提交的GPG签名的主键指纹。
signature:trustlevel
提交的GPG签名的信任级别。可能的输出为
ultimate
、fully
、marginal
、never
和undefined
。gv8xihay2#
我知道这是一个老问题,但离开了VonC所说的。我创建了一个单行bash脚本,它可以检查存储库中的所有标签,并自动对它们进行签名。您所要做的就是接受或更改旧标记中设置的消息。这是我想到的命令
字符串