【Git 学习笔记_27】DIY 实战篇:利用 DeepSeek 实现 GitHub 的 GPG 秘钥创建与配置

文章目录

    • 1 前言
    • 2 准备工作
    • 3 具体配置过程
      • 3.1. 本地生成 GPG 密钥
      • 3.2. 导出 GPG 密钥
      • 3.3. 将密钥配置到 Git 中
      • 3.4. 测试提交
    • 4 问题排查记录
    • 5 小结与复盘

1 前言

昨天在更新我的第二个 Vim 专栏《Mastering Vim (2nd Ed.)》时遇到一个经典的 Git 操作问题:如何在 WSL 环境下,将本地已有的 Git 仓库和 GitHub 远程仓库进行关联、并实现同步推送?在尝试传统的 HTTPS 协议推送失败后 1,当时为了节约时间,我改用 SSH + RSA 密钥对解决了这个问题。配置结束后,我又看到了曾被多次忽略的 GPG 秘钥设置:

图 1:GitHub 秘钥配置页上的 GPG 管理界面

【图 1:GitHub 秘钥配置页上的 GPG 管理界面】

今天刚好有空就试了下用 DeepSeek 来指导我完成 GPG 秘钥的配置,发现实战过程中还是有些坑值得注意。特此梳理并分享出来,让更多后来者少走些弯路。

2 准备工作

操作系统:Windows 自带的 WSL 环境、Ubuntu v20.04

Gitv2.25.1

3 具体配置过程

3.1. 本地生成 GPG 密钥

执行以下命令:

$ gpg --full-generate-key

然后根据提示秘钥类型,这里选择默认的 RSA and RSA 类型:

图 2:秘钥类型选择默认的 “RSA 与 RSA” 型

【图 2:秘钥类型选择默认的 “RSA 与 RSA” 型】

接着需要设置秘钥长度(keysize),保险起见我填最大的 4096

图 3:秘钥长度填最大长度 4096

【图 3:秘钥长度填最大长度 4096】

然后是设置有效期(默认永久有效,保持默认即可):

图 4:设置有效期(默认永久有效)

【图 4:设置有效期(默认永久有效)】

按回车键后,系统会再次让你确认(毕竟是永久有效,存在潜在安全风险)。输入 y 确认即可:

图 5:二次确认有效期设置,输入 y 确认即可

【图 5:二次确认有效期设置,输入 y 确认即可】

然后根据提示输入登录 GitHub 用到的用户名与绑定邮箱(注意邮箱一定不能写错,否则后期匹配不上):

图 6:根据提示输入帐号、邮箱、描述信息(非必填),然后确认

【图 6:根据提示输入帐号、邮箱、描述信息(非必填),然后确认】

然后系统会提示你输入一个 passphrase,也就是安全密码,输入完毕按回车键确认,就会看到如下界面,GPG 秘钥就生成好了:

图 7:成功生成本地 GPG 密钥对后的提示界面

【图 7:成功生成本地 GPG 密钥对后的提示界面】

3.2. 导出 GPG 密钥

先获取刚生成的 GPG 密钥 ID:

$ gpg --list-keys

从给出的秘钥信息列表中复制密钥 ID:

图 8:获取 GPG 密钥 ID 信息(红框选中部分)

【图 8:获取 GPG 密钥 ID 信息(红框选中部分)】

接着输入下列命令,将密钥 ID 代入:

$ gpg --armor --export <YOUR_GPG_KEYS_ID>
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGe6+CABEADVglzi0o4M1MdL+qH/l8S5hCt1OZJkH5QJwdgh1UjTrcD7exy7
...
1WFAIhz8gD/aM7BpipjxAPja7tp5HkKoRHi7OHEg1iVL+Kkgg5a6p2+psluI1MqG
5fMAIYTk0g4OFjYpMooTzA==
=Vqrv
-----END PGP PUBLIC KEY BLOCK-----
$ 

再将 -----BEGIN PGP PUBLIC KEY BLOCK----------END PGP PUBLIC KEY BLOCK----- 之间(包含边界)的文本内容复制到 GitHub 配置页面:

图 9:将导出的公钥信息存入 GitHub 配置页面

【图 9:将导出的公钥信息存入 GitHub 配置页面】

3.3. 将密钥配置到 Git 中

执行以下命令完成 Git 的配置:

$ git config --global user.signingkey <YOUR_KEY_ID>
$ git config --global commit.gpgsign true

3.4. 测试提交

配置成功后,就可以实际测一下代码的提交和推送了:

图 10:实测 GPG 密钥配置成功后的 commit 提交,需输入正确的安全密码

【图 10:实测 GPG 密钥配置成功后的 commit 提交,需输入正确的安全密码】

然后再试试推送到 GitHub

图 11:本地提交成功后,将 commit 节点推送至 GitHub

【图 11:本地提交成功后,将 commit 节点推送至 GitHub】

再到 GitHub 检查推送的 commit 节点,可以看到经过签名的本地提交都自带 Verified 校验标记:

图 12:在 GitHub 官网看到的已通过 GPG 签名校验的本地推送版本

【图 12:在 GitHub 官网看到的已通过 GPG 签名校验的本地推送版本】

4 问题排查记录

首次配置其实并没有这么顺利,完成 Git 的配置后提交一个本地 commit 就失败了:

$ git commit -m 'Test'
error: gpg failed to sign the data
fatal: failed to write commit object

将报错信息直接提给 DeepSeek,根据提供的报错原因逐一排查,最后发现是 GPG 默认的用于输入密码的 pinentry 程序没有配置。配置方法:打开或新建 GPG 配置文件 ~/.gnupg/gpg.conf,并输入以下内容:

pinentry-mode loopback

然后打开或新建另一个配置文件 ~/.gnupg/gpg-agent.conf,输入以下内容:

allow-loopback-pinentry

然后重启 GPG 代理:

$ gpg-connect-agent reloadagent /bye
OK
$ 

再次提交就能自动弹出提示,让你输入安全密码了。

以下为 DeepSeek 提供的问题原因排查流程(摘要):

图 13:DeepSeek 给出的问题排查清单,逐一验证到第四条时找到真正原因

【图 13:DeepSeek 给出的问题排查清单,逐一验证到第四条时找到真正原因】

此外,如果不将 loopback 模式配到 GPG 的配置文件中,还可以用以下命令进行测试:

$ echo "test" | gpg --clearsign

运行命令时会提示输密码,通过校验就会看到一串签名内容:

图 14:实测命令 gpg --clearsign 来反馈 GPG 签名是否配置成功

【图 14:实测命令 gpg --clearsign 来反馈 GPG 签名是否配置成功】

这样虽然简单些,但每次提交都得用上述命令检查一遍,效率其实并不高。

5 小结与复盘

本次和 DeepSeek 的互动没有开启推理模式,并且只在首次配置报错后才启用联网模式,实测下来效果依旧很好。由于 GPG 的本地配置之前并没有做过功课,所以也无法从提示词层面将问题描述得很精确;此时,应该果断放弃一步到位的想法,按照提供的思路进行实践,并将中途发生的异常如实提交给 DeepSeek。这比之前用谷歌百度搜索快太多了。

同时还应该注意,解决完问题后应该通读一遍和 DeepSeek 的完整对话,对配置过程中遇到的问题进行梳理复盘,主动从尝试中学习新知识。如果时间允许,还可以和 GitHub 官方公布的配置文档进行对比,找出两者的差异,在反复对比中加深印象。

正如 DeepSeek 无法一次性获知 GPG 配置时的具体环境,我们也不可能在 AI 工具的辅助下一步到位学会 GPG 的正确配置;但我们一定要保持清醒,从每次实际训练中主动完善自己的知识结构(本篇梳理也是基于这个目的)。这样才能掌握人的主动权。

为什么要特别强调这一点呢?因为最近很多朋友跟我反馈,他们在面对铺天盖地的科技新闻轰炸时,表现出的更多是深深的焦虑:AI 什么都能做了,人还做什么?我其实挺理解这种心情的,当前大家面临的困境也是前所未有的:明明知道 AI 很强大,但真正想要去了解 AI 的时候却感觉特别无力——门槛太高、众说纷纭、鱼龙混杂、泥沙俱下……过去面对一个未知领域,人们似乎还能认准大方向,也相信自己一定能弄明白;而时至今日,很多过去的美德和品质正在被 AI 的飞速发展慢慢解构:还有必要去钻研知识吗?会不会高不容易搞懂的操作和概念转眼间又被新的 AI 成果所取代?

这些问题目前都是无解的,或者只能说“都有可能”。毕竟我们经历了太长时间的缓慢积累与艰难探索,早已习惯了确定的答案和确定的道路。面对突如其来的 AI 巨变,每个人心中都对这个很可能全面超越人类的新事物心存忌惮。这种感觉,颇有点类似《超体》中女主 Lucy 第一次和 Samuel Norman 教授通话时,双方几乎同时表现出的迷茫和困顿的那一幕。但我认为,人还是不能沉湎于这样的迷茫的,而是坦然接受未来的不确定性,并且尽一切可能守护好自己的主观能动性。AI 越是强大,越不能在它面前缴械投降,而应该时刻保持主动地、深度地思考的习惯。


  1. 出于安全考虑,GitHub 官方已于 2021 年 8 月起禁止使用基于 HTTPS 协议的用户名/密码校验来推送 Git 代码库。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975450.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么继电器要加一个反向并联一个二极管

1 动感就是电流不突变 2 为什么有的继电器上面要反向并联一个二极管和电阻 1 并联二极管是为消除掉动感产生的高压 2 加上二极管是为了让继电器更快的断开&#xff08;二极管选型的工作电流要大于动感电流&#xff0c;开关要够快&#xff09; 3 公式&#xff1a;二极管压降0…

每日精讲:删除有序数组中的重复项,移除元素,合并两个有序数组

一 移除元素 1题目链接&#xff1a;27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 2题目描述&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数…

Docker-技术架构演进之路

目录 一、概述 常见概念 二、架构演进 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 三、尾声 一、概述 在进行技术学习过程中&am…

关于使用带elementplus前缀图标的步骤

关于使用带elementplus前缀图标的步骤 官网 安装 | Element Plus 1.需要全局注册 2.使用某个图标时导入&#xff0c; 如 import { Search } from element-plus/icons-vue

DPVS-3: 双臂负载均衡测试

测试拓扑 双臂模式&#xff0c; 使用两个网卡&#xff0c;一个对外&#xff0c;一个对内。 Client host是物理机&#xff0c; RS host都是虚拟机。 LB host是物理机&#xff0c;两个CX5网卡分别在两个子网。 配置文件 用dpvs.conf.sample作为双臂配置文件&#xff0c;其中…

买股票的最佳时机 - 2

买卖股票的最佳时机 III 题目描述&#xff1a; 提示&#xff1a; 1 < prices.length < 1050 < prices[i] < 105 分析过程&#xff1a; 写动态规划&#xff0c;我们需要考虑一下问题&#xff1a; 定义状态状态转移方程初始条件 遍历顺序 4种状态&#xff1a; …

数据分析与算法设计-作业2-拉普拉斯算子空间滤波和增强

作业2 题目 对Flower.dat图像&#xff08;10241024&#xff0c;np.uint8&#xff09;用如下拉普拉斯算子进行空间滤波和增强&#xff1a;np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]])&#xff0c;图像边缘采用复制填充方式&#xff0c;不使用其他第三方库&#xff0c;使…

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当下这个高速发展的时代&#xff0c;网络科技正以令人惊叹的速度不断迭代更新。从 5G …

基于SpringBoot的二手交易系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当今社会&#xff0c;随着电子商务的蓬勃发展和人们消费观念的转变&#xff0c;二手物品交易逐渐成为了一种新的生活方式。人们越来越倾向于将不再需要的物品进行二次交易&#xff0c;以实现资源的有效利用和环保理念的实践。…

vscode无法预览Markdown在线图片链接

问题&#xff1a;在VSCode中&#xff0c;打开MarkDown文件&#xff0c;存在在线图片链接&#xff0c; 但是在预览时却无法显示。 原因&#xff1a;因为Visual Studio Code中的MarkDown默认配置中只允许载入安全内容 解决方法&#xff1a; 1、输入快捷键 Ctrl Shift P 打开…

Power Query M函数

文章目录 三、PQ高阶技能&#xff1a;M函数3.1 M函数基本概念3.1.1 表达式和值3.1.2 计算3.1.3 运算符3.1.4 函数3.1.5 元数据3.1.6 Let 表达式3.1.6 If 表达式3.1.7 Error 3.2 自定义M函数3.2.1 语法3.2.2 调用定义好的自定义函数3.2.3 直接调用自定义函数3.2.4 自定义函数&am…

election靶机渗透测试

发现靶机ip地址 使用nmap进行扫描端口发现详细信息nmap -T4 -sV -sC -p- 192.168.52.142 用dirsearch扫一下网站的目录 看到一个phpinfo 一个phpmyadmin的登录页面 robots.txt文件 看一下这个election目录下并没有发现什么 继续进行目录扫描&#xff0c;这时候看到一个admin的l…

为AI聊天工具添加一个知识系统 之119 详细设计之60 圣灵三角形和Checker 之2

本文要点 要点回顾 我们回顾一下本题目的讨论内容。 我的想法是&#xff0c; 将Substance 作为 面向服务的架构的起点并基于差异来自下而上地分类 实体--目的是实体职责单一化&#xff0c;将Object作为面向对象的语义差异的系统原点 并沿着差异继承的路径来至上而下地划分对…

安全生产月安全知识竞赛主持稿串词

女:尊敬的各位领导、各位来宾 男:各位参赛选手、观众朋友们 合:大家好&#xff5e; 女:安全是天&#xff0c;有了这一份天&#xff0c;我们的员工就会多一份幸福&#xff0c; 我们的企业就会多一丝光彩。 男:安全是地&#xff0c;有了这一片地&#xff0c;我们的员工就多了一…

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 &#xff0c;一部分是自己的总结。 一、创建纹理贴图 注意&#xff1a;把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意&#xff1a;将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…

Deepin(Linux)安装MySQL指南

1.下载 地址&#xff1a;https://downloads.mysql.com/archives/community/ 2.将文件解压到 /usr/local 目录下 先cd到安装文件所在目录再解压&#xff0c;本机是cd /home/lu01/Downloads sudo tar -xvJf mysql-9.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local3.创建软链…

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址&#xff1a;[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码&#xff1a;GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …

Aseprite绘画流程案例(1)——画相机图标

原图&#xff1a; 步骤一&#xff1a;打开需要参照的图标 步骤二&#xff1a;将参照的图片拖放到右边&#xff0c;作为参考 步骤三&#xff1a;新建24x24的画布&#xff0c;背景为白色的画布 步骤四&#xff1a;点击菜单栏——视图——显示——像素网格&#xff08;如果画布已经…

计算机毕业设计SpringBoot+Vue.js母婴商城(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本&#xff1a; 2. springboot项目搭建 可以集成在自己的项目里&#xff0c;也可以到 spring.io 生成一个项目 生成的话&#xff0c;如下…