相关资料:

如何使用git通过ssh协议拉取gitee上的项目代码——如何正确的免密使用git


不论是gitee还是GitHub都有两种公钥设置,一种是ssh公钥,另一种则是GPG公钥。ssh公钥是为了在进行git pull和git push操作时进行免密验证的;而GPG公钥是在git tag和git commit时进行验证的。不过需要注意的是,如果不进行ssh公钥设置,那么在进行git pull和git push时都是需要在每次操作的时候进行用户名和密码认证的,因此进行ssh公钥验证会使git的操作简化,但是GPG公钥如果不进行设置是不会有任何影响的,不会对git的tag和commit操作有任何影响,完全可以在无验证的情况下进行git tag和git commit操作,如果你对git项目中的tag和commit操作进行了GPG的公钥设置,那么在每次进行git tag和git commit操作的时候可以手动加入指定GPG私钥签名的的参数,这样推送到远端的代码就会显示已被GPG验证的信息,否则git的tag和commit操作在远端会显示签名状态为未验证。

可以说,设置git的ssh公钥会简化git pull和git push的密码验证,但是设置git的GPG公钥则会增加git的操作步骤。

git的ssh公钥是为了确认你有访问并修改git远端仓库的资格,但是git的远端代码库往往是多人合作的,也就是说同时可以有多个人对git的远端仓库进行代码的提交和修改,这个时候这几个合作者之间的身份是无法确认的,比如一个项目有A、B、C三个人合作,这三个人均有可以访问代码库的ssh公钥,但是对于每一次的git的tag和commit操作是无法确认到底是A、B、C三个人中到底是哪一个操作的(用户名和邮箱并不是信息不变的,无法作为身份的唯一验证的),而这个时候项目的总负责人就可以通过设置GPG公钥来实现对每一次的tag和commit进行身份验证,这样合并到远端代码库中的所有操作都可以定位到具体人,这样即使有人恶意添加后门代码或者是删库我们也是可以直接定位到具体的操作者的。这也是git的GPG公钥设置的意义,如果是个人维护的项目就没有必要进行GPG公钥的设置了,否则就是为自己的操作增加工作罢了,但是对于多人合作的项目还是很有必要添加GPG公钥认证的。

给出Gitee的ssh公钥和GPG公钥设置页面:


关于Tag的使用以及GPG秘钥生成和使用,详细见:

  1. 如何在 Gitee 上使用 GPG
  2. GitHub GPG签名 Tag签名 Verified认证,防伪造的github commits
  3. git tag详解

这里只给出基本操作:

GPG秘钥生成:

gpg --full-generate-key --pinentry-mode=loopback

GPG公钥导出:

gpg --armor --export 8086B4D21B3118A83CC16CEBB0A02972E266DD6D

为本地主机的git配置刚才生成的GPG私钥:

git config --global user.signingkey 8086B4D21B3118A83CC16CEBB0A02972E266DD6D

将导出的GPG公钥填入到Gitee和Github的配置中。

在本地的git项目中对commit操作进行GPG私钥签名:

git commit -S -m "YOUR COMMIT MESSAGE"
git log --show-signature # 查看签名状态

在本地的git项目中对tag操作进行GPG私钥签名:

git tag -s v1.0.0 -m "version comments"
git push origin v1.0.0
# v1.0.0您可以自行定义

需要注意,git tag -s v1.0.0 -m "version comments" 是使用GPG私钥签名,

git tag -a v1.0.0 -m "version commets"是不使用GPG私钥签名。

也就是说,-s是使用GPG私钥签名打tag,-a是不使用GPG私钥签名打tag。


GPG秘钥的生成:


PS. 不论是SSH公钥和GPG公钥的验证都有一前提,那就是私钥是保存在个人手上的,并且是不会被泄露的,因为谁持有私钥谁就具有相应的操作权限。

Git的GPG签名 —— Tag签名 Verified验证,防伪造的gitee/github commit验证的更多相关文章

  1. git 使用详解-- tag打标签

    Git 的标签管理.跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′). 列出git中现有标签 要想列出git中现有的所有 ...

  2. Android 获取某apk的签名信息,可用作防盗版进入。

    转载请标明出处:  http://write.blog.csdn.net/postedit/45721779作者:skay 一般项目中有防盗版的需求,必须是正版软件才能使用,这就需要获取当前安装包的签 ...

  3. md5只是用来签名,签名的作用是保证数据完整不会被破坏而已。签名和加密是两回事

    md5只是用来签名,签名的作用是保证数据完整不会被破坏而已,多一个sign标签,sign的值就是md5生成的字符串.签名和加密是两回事

  4. git使用分支与tag

    查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b ...

  5. git 如何同步本地tag与远程tag

    问题场景:同事A在本地创建tagA并push同步到了远程->同事B在本地拉取了远程tagA(git fetch)->同事A工作需要将远程标签tagA删除->同事B用git fetch ...

  6. git 远程分支和tag标签的操作

    git远程分支操作:1.创建远程分支git push --set-upstream origin develop:develop2在服务器创建远程分支devlop2,让本地的develop分支和dev ...

  7. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  8. EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证

    之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等.本文介绍E ...

  9. //解决validator验证插件多个name相同只验证第一的问题

    //解决validator验证插件多个name相同只验证第一的问题 var validatorName = function () { if ($.validator) { $.validator.p ...

  10. Asp.net MVC验证那些事(4)-- 自定义验证特性

    在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...

随机推荐

  1. CAT监控指标

    CAT监控指标 CAT 是基于 Java 开发的实时应用监控平台.官方文档:https://github.com/dianping/cat CAT提供以下几种报表:Transaction报表 一段代码 ...

  2. Python中的属性

    Python中的属性主要分为类属性,对象属性. 1.类属性 类属性:类所有,所有的实例对象都能够共享,类定义时就直接指定的属性,能通过类名和实力对象名访问,当当前的类属性被实例对象通过对象名.属性名的 ...

  3. itunes同步视频

    itunes同步视频不要通过影片同步,而是通过照片同步 如果显示的是iCloud,只需在手机或ipad上,设置里icloud中,包照片的iCloud关掉,然后重连一下就行

  4. [代码]C语言进行md5,SHA256,SHA512加密

    前言 原本在学puppet,它的user资源需要设置hash后的散列值,结果-我把加密算法,shadow文件,密码破解搞了个遍- 环境 CentOS7 gcc编译器 /etc/shadow文件解析 文 ...

  5. 加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

    6月21日-23日,2024华为开发者大会(HDC 2024)如期举行.在22日的[鸿蒙生态伙伴SDK]分论坛中,正式发布了[鸿蒙生态伙伴SDK市场],其中蚂蚁数科旗下移动开发平台mPaaS(以下简称 ...

  6. Ubuntu 使用 SVN 管理 项目

    背景 公司的项目需要在 Linux 环境进行开发,而都是使用 SVN 进行管理的.习惯了 SVN-GUI 的我,需要学习 SVN 的命令行. 准备 安装 SVN sudo apt-get apt-ge ...

  7. python基础-元组tuple( )

    元组的定义和操作 元组的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 不支持 数据有序 是 使用场景 不可修改.可重复的 一批数据记录场景     # 定义元组 ...

  8. RD/RT格式

    一.RD RD长度是8字节,包括Type和Value字段. Type字段:2字节 Value字段:6字节 Type字段的取值决定了Value字段的结构.每种类型的Value字段都由两个部分组成,分别是 ...

  9. 基于SSD202D芯片的最小嵌入式Linux开发板来了 仅需99元 入门嵌入式Linux必选

  10. python3 中的装饰器总结

    前言 python3 中有很多好用的装饰器,本编文章作为个人笔记使用,随时更新. 正文 1. @dataclass 内容来源:chatgpt3.5 @dataclass是一个装饰器,用于给类提供自动生 ...