带GPG签名的Git tag

使用 GPG 为极狐GitLab git commit 签名 阅读详情
30 September 2013

Git tag


Tag用来做什么?

Tag即标签,用以给项目仓储打标签,通常用作里程碑标识,以方便项目进度、发布版本管理及规划。
Git tag可以用来创建标签,列出标签表,删除标签及用以验证带有GPG签名的带标签的项目。

git tag常见用法

创建Tag
git tag v1.0

标记当前位置为tag,tag名为v1.0

git tag -m "Say something" v1.0

标记当前位置为tag,tag描述为”Say something”, tag名为v1.0

列出tag表
git tag (-l)

列出tag表,只显示标签名

git tag -ln

列出tag表,并显示其message(描述)

删除tag
git tag -d [tag name]

删除某个tag

验证tag
git tag -v [tag name]

验证某个tag的GPG签名

GPG

GPG是加密软件,可以使用GPG生成的公钥在网上安全的传播你的文件、代码。


为什么说安全的?以Google所开发的repo为例,repo即采用GPG验证的方式,每个里程碑tag都带有GPG加密验证,假如在里程碑v1.12.3处你想要做修改,修改完后将这个tag删除,然后又创建同名tag指向你的修改点,这必然是可以的。但是,在你再次clone你修改后的项目时,你会发现,你对此里程碑tag的改变不被认可,验证失败,导致你的修改在这里无法正常实现。这就是GPG验证的作用,这样就能够保证项目作者(私钥持有者)所制定的里程碑别人将无法修改。那么,就可以说,作者的代码是安全传播的。


为什么会有这种需求?一个项目从开发到发布,再到后期的更新迭代,一定会存在若干的稳定版本与开发版本(存在不稳定因素)。作为项目发起者、持有者,有权定义他(们)所认可的稳定版本,这个稳定版本,将不允许其他开发者进行改动。还以Google的repo项目为例,项目所有者定义项目开发过程中的点A为稳定版v1.12.3,那么用户在下载v1.12.3版本后,使用的肯定是A点所生成的项目、产品,就算其他开发者能够在本地对v1.12.3进行重新指定,指定到他们修改后的B点,但是最终修改后的版本给用户用的时候,会出现GPG签名验证不通过的问题,也就是说这样的修改是不生效的。


可能还是不太好理解,说一个我曾经遇过的坑,repo在某个版本有个小错误,我在这个版本修复错误后,提交到内网的服务器给同事用(我重新定义这个版本的指向),最后发现同事在更新项目后,出现版本GPG签名验证错误,不能正常使用。


说了这么多,希望大家能够理解GPG签名验证的意义所在。下边就说一说,如何在你的项目中使用这种方式。

生成GPG Key
gpg --gen-key

然后根据提示选择你要的签名

gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 

选择加密种类

RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)

请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)

选择密钥有效期

对以上信息进行确认,然后输入身份,最终确认,等待生成GPG Key。

您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
    “Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”

真实姓名: Keven Liu
电子邮件地址: airk908@gmail.com
注释: GPG key for Keven
您选定了这个用户标识:
    “Keven Liu (GPG key for Keven) <airk908@gmail.com>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O
您需要一个密码来保护您的私钥。

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

生成过程中可能出现类似提示:

随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要174字节)

疯狂的敲打键盘吧,不过看好还需要多少,悠着点。

稍等片刻,GPG Key就能生成好了,验证一下是否生成成功:

gpg --list-keys

如果输出类似信息就代表属于你的GPG Key生成成功了:

/home/keven/.gnupg/pubring.gpg

pub   2048R/AF26C87F 2013-09-30
uid                  Keven Liu (Gpg key for Keven Liu<airk908@gmail.com>) <airk908@gmail.com>
sub   2048R/C9A00F19 2013-09-30

上边显示的是公钥,顺便也看一下与之匹配的私钥生成如何:

gpg --list-secret-keys

如果成功,会显示类似信息,不过文件位置应该是/home/keven/.gnupg/pubring.gpg(keven是我的用户名,你的机器上该是你的)

使用GPG加密你的tag
git tag -s "My tag message" v1.0

是的,将-m 换做-s就是加密签名了

不过,好像很多人会出现错误,比如:

gpg: WARNING: using insecure memory! 
gpg: please see http://www.gnupg.org/faq.html for more information 
gpg: skipped `Keven Liu <airk908@gmail.com>': secret key not available 
gpg: signing failed: secret key not available 
error: gpg failed to sign the tag 
fatal: unable to sign the tag

这个错误一Google的话都是教你怎么生成一个GPG Key,其实不然,git tag有一条help这样写到:

-u, --local-user <key-id> 使用另一个Key签名此tag

所以,这个错误可以这样解决:

git tag -u "Keven Liu" -s "My tag message" v1.0

这样,你的tag就用刚刚生成的GPG Key签名了。可以查看一下项目的tag验证信息:

git tag -v v1.0

终端输出:

object c88d710635a97e6a634d2a1b25e3eba2f8a3574e
type commit
tag v1.0
tagger Keven Liu <airk908@gmail.com> 1380552288 +0800

My first tag with gpg key of my own
gpg: 于 2013年09月30日 星期一 22时45分05秒 CST 创建的签名,使用 RSA,钥匙号 AF36C27F
gpg: 完好的签名,来自于“Keven Liu (Gpg key for Keven Liu<airk908@gmail.com>) <airk908@gmail.com>”

至此,带有GPG签名验证的tag就做好了,其他开发者将无法修改你所签名的这个tag。

Windows环境下Git提交GPG签名完整配置指南 在软件开发和开源协作中,代码提交的身份验证是保障代码完整性和可信度的基础技术。其核心原理是通过非对称加密技术,使用私钥对提交内容生成数字签名,公钥则用于验证签名者身份。这项技术的核心价值在于防止代码在传输和协作过程中被篡改,建立可追溯的信任链。在持续集成、团队协作和开源贡献等应用场景中,签名提交已成为专业工作流的标准实践。特别是在Windows操作系统环境下,由于工具链生态和路径配置的差异,实现稳定可靠的GPG签名常会遇到环境变量配置、代理设置等具体挑战。本文针对Windows平台,系统梳理了从工具选型、密 阅读详情

相关推荐

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 242

GPG KEY生成及签名GIT COMMIT

文章目录系统环境生成GPG KEYGPG命令GIT中应用GPG 系统环境 本次操作系统是Ubuntu 18.04。 GPG在不同OS上有不同的安装程序。 生成GPG KEY 根据OS选择安装GPG。若系统中已经安装了 gpg2,那么可以使用 gpg2 命令取代 gpg。Ubuntu下gpg是自带的程序,也可以安装gpg2。 使用以下命令来创建 公钥/私钥。 $ gpg2 --full-gen-key 在mac等系统上,命令可能是 gpg2 --gen-key。 第一个需要选择的是生成key类

Zen@sz 博客 3601

基于STM32的智能交通灯管理系统设计

本项目基于STM32微控制器设计了一个智能交通灯管理系统,通过多个传感器模块实现对交通灯的智能化控制。项目涉及硬件电路设计、传感器数据采集和逻辑控制实现,适用于城市交通路口或小区路口。该基于STM32的智能交通灯系统通过超声波传感器实现了流量监测,结合LED和蜂鸣器实现了自动交通信号控制,适用于城市或社区路口。基于STM32CubeMX生成的框架,编写红绿灯切换、流量监测和蜂鸣器控制的代码。以下为主循环,通过不断读取传感器数据,结合交通灯和蜂鸣器模块实现智能交通灯控制。

2401_88410555的博客 2063

gpg: skipped "xxx": secret key not available的一种解决方法

今天,在学习使用私钥来签署一个标签时遇到了一个问题。如下,gpg: skipped "xxx": secret key not available gpg: signing failed: No secret key error: gpg failed to sign the tag error: unable to sign the tagGnuPG也安装好了,也生成了gpg私钥。为什么还是一直出

1万+

freertos移植心得

1.freertos移植msp430 今天终于移植成功了freertos。现在写下这篇博文来整理这一路移植过程中遇到的问题和心得。 由于使用的是IAR FOR MSP430的IDE,博文只讨论在IAR下的移植。本文针对的是官方支持的平台架构下的移植,不使用官方提供的demo,得到的是一个纯洁版的系统。 1.下载源代码 在freertos的官网下载一份最新的源代码点击打开链接。 2.选择平

一条狗的博客 4173

在Ubuntu上通过Wine完美运行企业微信的详细指南

本文提供了在Ubuntu系统上通过Wine兼容层安装和运行企业微信的详细教程。针对官方未提供Linux版本的痛点,指南推荐使用Ubuntu Kylin团队优化打包的Wine环境,通过简单的命令行步骤即可完成部署,并涵盖启动、中文输入法配置、文件管理等常见问题的解决方案,帮助用户实现高效、稳定的办公沟通。

weixin_29306317的博客 232

Git:使用GPG签名Commit

前言 GPG从诞生开始,目的就是为了加密而存在。到如今的 git,用 GPG 来签名 commit , 可以保证我们提交不被篡改(当然密钥暴露就另当别论了!) 效果图 GPG概念及安装 官方中文文档 这里很好的说明了GPG 运行原理和使用姿势 GPG官方下载 核心是命令行,也有对应的 GUI 客户端,看自己喜欢了。 简化版姿势 假设你已经知道 GPG 是个什么东西,这里只说明...

CRPER 2061

【QGIS】软件下载安装及GIS4WRF插件使用

【QGIS】软件下载安装及GIS4WRF插件使用

WW、forever的博客 1800

git第一次拉取远程分支项目(ssh的方式)

点击github的"Settings"-----"SSH and GPG keys"-----"New SSH keys"。将本地复制的key粘贴至"key"一栏处。ssh-keygen -t rsa -C "yourEmailAddress" 或 ssh-keygen -t ed25519 -C "yourEmailAddress"git checkout -b branchname(branchname是分支的名字)4.本地创建分支,并切换至本地分支。5.将远程分支上的内容都拉取到本地。

mudisheng0202的博客 2414

【系统分析师】第2章-基础知识:数学与工程基础(核心总结)

数学与工程基础

数据知道的博客 6813

运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案

的本质是Windows 系统端口保留策略而非代码 bug。推荐使用方案一(调整动态端口范围),一劳永逸解决。如果你安装了 Docker Desktop 或启用了 WSL2,调整端口范围后记得检查相关服务是否正常运行。

一键难忘的博客 4158

带GPG签名的Git tag gpg: signing failed: secret key not available

带GPG签名的Git tag 转载 2014年06月14日 15:35:58 标签: 3613

放松不放纵的博客 3448

改进后的yolov8导出进行部署到rk3588上时,导出为onnx格式报错aten::fft_fft2算子不支持导出...如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1798

git创建tag

背景:创建一个tag来指向软件开发中的一个关键时期,比如版本号更新的时候可以建一个“v1.0”、“v2.1”之类的标签,在以后回顾的时候会比较方便。 tag的使用很简单,主要操作有:查看tag、创建tag、删除tag、验证tag、共享tag以及切换tag。 1、查看tag 列出所有tag:git tag 列出指定标签信息:git show v1.0 列出指定版本tag:比如---列出1....

youngeffort的博客 1770

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Git打Tag避坑指南:从创建、推送到删除,一次讲清新手常犯的5个错误

本文详细解析Git打Tag的5个常见错误及解决方案,包括远程推送误区、误删Tag恢复、Tag检出分支开发隐患等。特别强调带注释Tag的使用和团队协作中的命名规范,帮助开发者避免版本管理混乱,提升协作效率。

weixin_30443731的博客 426

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Github打tag标签,让查找的效率提高了几倍!

文章目录效果图1查看tag2创建tag3删除tag4验证tag5共享tag 我们可以创建一个tag来指向软件开发中的一个关键时期,比如版本号更新的时候可以建一个“v2.0”、“v3.1”之类的标签,这样在以后回顾的时候会比较方便。tag的使用很简单,主要操作有:查看tag、创建tag、验证tag以及共享tag。 什么?还不知道?还不知道就自己去补课,我默认大家都知道了。算了我是暖男,在贴一下给大家看看,下次可别忘了哈。 效果图 点击访问查看 你可能会说,概念我知道了,到底怎么使用呢? emm =

瑞新の博客:bennyrhys 2891

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Git学习教程(五):Git标签

第五课 Git标签 内容提要:创建有签名,无签名、轻量级标签来永久的标记项目历史中的关键点 跟大多数的VCS工具一样,git也有在历史状态的关键点“贴标签”的功能--一般人们用这个功能来标记发布点(例如'v1.0')。这节课我们学习如何使用标签列表,创建新标签,以及在git中有哪些不同类别的标签。 列出git中现有标签 要想列出git中现有的所有...

weixin_34228617的博客 206

git标签

内容提要:创建有签名,无签名、轻量级标签来永久的标记项目历史中的关键点   跟大多数的VCS工具一样,git也有在历史状态的关键点“贴标签”的功能--一般人们用这个功能来标记发布点(例如'v1.0')。这节课我们学习如何使用标签列表,创建新标签,以及在git中有哪些不同类别的标签。   列出git中现有标签   要想列出git中现有的所有标签,输入'git

Shirley_John_Thomas的博客 316

github tag

tag 我们可以创建一个tag来指向软件开发中的一个关键时期,比如版本号更新的时候可以建一个“v2.0”、“v3.1”之类的标签,这样在以后回顾的时候会比较方便。tag的使用很简单,主要操作有:查看tag、创建tag、验证tag以及共享tag。 1查看tag 列出所有tag: git tag 这样列出的tag是按字母排序的,和创建时间没关系。如果只是想查看某些tag的话,可以加限定...

weixin_30525825的博客 98

Git-Git里程碑

里程碑即Tag,是人为对提交进行的命名。这和Git的提交ID是否太长无关,使用任何数字版本号无论长短,都没有使用一个直观的表意的字符串来得方便。例如:用里程碑名称“v2.1”对应于软件的2.1发布版本就比使用提交ID要直观得多。 使用git describe命令显示里程碑和提交ID的组合来代表软件的版本号。本章将详细介绍里程碑的创建、删除和共享,还会介绍里程碑存在的三种不同形式:轻量级里程碑、带注...

weixin_30664615的博客 796

Git+GPG加密tag一直失败

最近在学习Git方面的知识,发现廖雪峰老师的网站有系统介绍Git的教程 创建标签 我用该命令:$ git tag -s v0.2 -m “signed version 0.2 released” fec145a(一个commit id,通过命令 git log –pretty=oneling –abbrev-commit可以看到所有的6位缩写的commit id)一直报错误: gpg: ski

堕落方能自由的专栏 3516

git tag :gpg: skipped “xxx@xxx“: secret key not available

最近发生件奇怪的事,我的git管理,clone,add,commit 都可以。但是git tag 时候就报错:git tag :gpg: skipped "xxx@xxx": secret key not available。网上找了很久找到办法记录下: https://stackoverflow.com/questions/12061645/generating-a-gpg-key-for-%20git-tagging 1、首先运行下面命令 $ gpg --list-key 运行完了...

esiangchioa的博客 635
上一篇: java 术语
下一篇: PWLib指引者
killmice
博客等级 码龄14年 119粉丝 54原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值