Github的一个奇技淫巧

github,一个,奇技淫巧 · 浏览次数 : 2338

小编点评

**背景:** * VictoriaLogs 在 GitHub 上提交了一个 PR。 * 提交过程中,需要在 commit 中添加签名。 * 由于我之前没注意这个选项,我无法在提交之前设置签名。 **解决方案:** 1. 在 PR 中添加新的代码,并选择 "Git commit -S -m 'YOUR_COMMIT_MESSAGE'" 的提交方式。 2. 按照提示在 GitHub 的个人设置页面中添加 GPG 密钥。 3. 在提交之前,使用 `gpg --armor --export` 命令导出公钥并将其复制到 GitHub 的个人设置页面。 4. 在 `git commit` 中使用 `-S` 选项,并在提示中输入您的签名。 5. 将代码提交到 GitHub 分支中。 **注意:** * 如果您已经设置过 GPG 密钥,您可以使用 `git config` 命令将其删除。 * 如果您在提交之前已经设置了 GPG 密钥,您可以使用 `git config` 命令将其删除。

正文

Github的一个奇技淫巧.png

背景

前段时间给 VictoriaLogs 提交了一个 PR:
https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934

本来一切都很顺利,只等合并了,但在临门一脚的时候社区维护人员问我可否给 git commit 加上签名。

于是我就默默的调试到了凌晨四点😭

image.png

以前我也没怎么注意过这个选项,经过 Google 后发现 Idea 在提交的时候可以自行设置。

image.png
当我勾选了这个提交新的代码后,依然被告知没有正确的签名,这时我才发现理解错误了。

为 GitHub 的提交签名

结合这位社区大佬给的文档,他所需要的是每次提交的代码都是有签名的,类似于这样:
image.png

如果我们想要 GitHub 现实 Verified 这个标签,那就需要对 commit 或者是打的 tag 进行签名。

而签名的方式有三种:GPG, SSH, S/MIME,这里我以 GPG 签名为例,整体流程如下:

image.png

先在https://www.gnupg.org/download/这里下载安装 GPG 的命令行程序。

gpg --full-generate-key

使用这个命令生成 key,之后会根据提示录入一些信息,包含你的 ID 和邮箱,建议都和 GitHub 的 ID 邮箱保持一致即可,然后一路回车完事。

之后可以使用这个命令查看刚才创建的 Key:

gpg --list-secret-keys --keyid-format=long
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot <hubot@example.com>
ssb   4096R/4BB6D45482678BE3 2016-03-10

我们需要将 3AA5C34371567BD2 这个 Key 的 ID 字符串复制,之后执行:

gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format

此时会打印出公钥,我们将

-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----

这些数据复制到 GitHub 的个人设置页面:
image.png

此时还没完,如果我们直接提交代码的也不会有 Verified 的标签。

image.png

我们还需要打开 git 的 config 设置:

git config commit.gpgsign true

# 全局打开
git config --global commit.gpgsign true
git commit -S -m "YOUR_COMMIT_MESSAGE"
git push

这样提交的 Commit 就会打上验证的标签了。
image.png

-S 的效果和在 idea 中选中 Sign-off 的效果一样。

官方文档也有详细的步骤:
https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification

Squash 合并提交

不过在我这个 PR 的背景下还有一个步骤没有完成,就是我之前提交的 Commit 都没要验证,我需要将他们都合并为一个验证的 Commit 然后在强制推送上去,这样整个 git log 看起来才足够简洁。

最终效果如下,只有一个 Commit 存在。

这时候就得需要 git rebase 出马了。

image.png
以刚才测试的这两个提交为例,我需要将他们合并为一个提交。

我们先使用这个命令:

git rebase -i HEAD~N
git rebase -i HEAD~2

N 就是我们需要合并几个提交,在我这里就是 2.

image.png
我们需要将除了第一个 commit 之外的都修改为 s,也就是下面注释里的 squash 的简写(压缩的意思)。

这是一个 vim 的交互编辑模式,编辑完成之后保存退出。

不会还有程序员不知道如何保存 vim 退出吧🐕。

保存后又会弹出一个编辑页面,让我们填写这次压缩之后的提交记录,默认会帮我生成好,当然你也可以全部删掉后重写。

image.png

我这里就直接使用它生成好的就可以了,依然还是保存退出。

最后再强行推送到我所在的分支即可:

git push origin test-rebase -f

在这个分支的提交页面也只会看到刚才强行推送的记录了,刚才的两个提交已经合并为这一个了。

image.png

总结

借着这个机会也了解了 rebase 的骚操作挺多的,不过我平时用的最多的还是 merge,这个倒没有好坏之分,只要同组的开发者都达成一致即可。

与Github的一个奇技淫巧相似的内容:

Github的一个奇技淫巧

背景 前段时间给 VictoriaLogs 提交了一个 PR: https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934 本来一切都很顺利,只等合并了,但在临门一脚的时候社区维护人员问我可否给 git commit 加上签名。 于是我就

Pyinstaller打包exe的反编译——LitCTF 2024(公开赛道)ezpython!!!!!

这个工具折磨了我很久,搭配题目记录一下... 题目 Die 打包工具: PyInstaller 建议下载GitHub的:GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor 单独的一个 pyInstaller.py 会很麻烦

开源的网络瑞士军刀「GitHub 热点速览」

上周的开源热搜项目可谓是精彩纷呈,主打的就一个方便快捷、开箱即用!这款无需安装、点开就用的网络瑞士军刀 CyberChef,试用后你就会感叹它的功能齐全和干净的界面。不喜欢 GitHub 的英文界面?GitHub 网站汉化插件 github-chinese,让英语不好的同学实现无障碍浏览 GitHu...

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录,像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得,并且该功能可用的场景也比较多,于是

开源项目分享:ChatGPT 控制台聊天应用

开源项目分享:ChatGPT 控制台聊天应用 分享一个我最近完成的一个小应用,一个ChatGPT 的控制台聊天应用,大家都在搞AI,我也来玩一玩,顺便分享到社区,有兴趣的小伙伴可以去我的github主页下载体验。 项目简介 ChatGPT 控制台聊天应用 基于.NET8实现,一键拥有你的私人 Cha

如何给Github上的开源项目提交PR?

前言 对于一个热爱开源的程序员而言,学会给GitHub上的开源项目提交PR这是迈出开源的第一步。今天我们就来说说如何向GitHub的开源项目提交PR,当然你提交的PR可以是一个项目的需求迭代、也可以是一个Bug修复、再或者是一些内容文本翻译等等,并不是说PR就是一定要翻天覆地的功能。今天我们做一个简

代码界的超级英雄:GitHub的奇幻冒险之旅

GitHub简介 GitHub是一个用于代码托管、版本控制和协作开发的平台。它于2008年2月8日由Chris Wanstrath、PJ Hyett和Tom Preston-Werner创立,目前由微软拥有。 GitHub是目前最流行的代码托管平台之一,拥有超过8000万个项目和超过2.7亿活跃用户

快速绘制流程图「GitHub 热点速览 v.22.47」

画流程图一直是研发的一个难题,如何画得通俗易懂已经够让人头疼了,还要美观大方。用 d2 的语法描述下流程,d2 会自动帮你生成一张配色极佳的流程图。说到研发的选择,本周特推的 choiceof.dev 罗列了众多开发过程中会遇到的选项,你可以自测下你同主流研发的契合度。 本周周榜呢,有监控网络流量的

学 Rust 要几天?「GitHub 热点速览 v.22.51」

本周的 GitHub Trending 非常给力,一是解决了 Rust 的学习问题,提供了一个全面的教学课程;二是提供了多个高性能工具,比如,为 PWA 而生的 atrilabs-engine

protolator简介

`github.com/hyperledger/fabric-config/protolator` 是 Hyperledger Fabric 中的一个 Go 包,用于将 Protocol Buffers(ProtoBuf)消息和 JSON 格式之间进行转换。它提供了一种方便的方式来将 Fabric