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...

开源项目分享: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

大模型和人一样需要 提高对 编程语言认知

今天在ChatGLM2-6B 的仓库里看到了这么一个issue: https://github.com/THUDM/ChatGLM2-6B/issues/122: 这位兄弟说的挺好,其中有点小错误:三星Tizen架构 其实不是架构,是属于arm架构 ,Tizen是 三星的一个操作系统。由此我想到了C