经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Git » 查看文章
Github的一个奇技淫巧
来源:cnblogs  作者:crossoverJie  时间:2023/9/20 9:32:49  对本文有异议

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 的命令行程序。

  1. gpg --full-generate-key

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

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

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

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

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

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

  1. -----BEGIN PGP PUBLIC KEY BLOCK-----
  2. -----END PGP PUBLIC KEY BLOCK-----

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

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

image.png

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

  1. git config commit.gpgsign true
  2. # 全局打开
  3. git config --global commit.gpgsign true
  4. git commit -S -m "YOUR_COMMIT_MESSAGE"
  5. 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
以刚才测试的这两个提交为例,我需要将他们合并为一个提交。

我们先使用这个命令:

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

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

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

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

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

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

image.png

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

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

  1. git push origin test-rebase -f

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

image.png

总结

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

原文链接:https://www.cnblogs.com/crossoverJie/p/17713741.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号