当前位置:首页-文章-技术分享-正文

为春松客服贡献代码时签署 DCO 教程

非常荣幸的通知大家,春松客服开发者贡献协议目前已经确认采用 DCO 的方案,如果您希望了解更多信息,可以查看以下文章:

https://www.cskefu.com/2022/10/19/vote-cla-dco-result/

LT;DR

简单说,就是在以往的 git commit 时使用,git commit -s

e.g.
git checkout -b bugfix
git add --all
git commit -s -m "update README.md and add english version"
git push origin bugfix

然后通过 https://github.com/cskefu/cskefu/pulls 创建 PR。

注意:push 的时候,不要直接推送到 develop、master 分支,这两个分支需要和 cskefu/cskefu 保持一致,这两个分支是从 cskefu/cskefu 同步下来的。

以下为详细介绍。

如何开始贡献

那么,作为一名开发者,我们应该如何参与到春松的客服的代码贡献,以及如何签署 DCO 呢?船长今天带着大家一起来学习下。

克隆主仓库到自己的分支

首先,我们需要 Fork 主仓库的代码,到自己的账号下,请认准 https://github.com/cskefu/cskefu/ ,为了更好的协作,我们不建议在主仓库下新建分支。

点击 链接快速新建分支 https://github.com/cskefu/cskefu/fork

CleanShot 2022-10-30 at 07.07.42@2x

fork 仓库是一个非常快速的动作,接下来我们可以将自己的代码拉到本地

samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu
○ git clone https://github.com/SAMZONG/cskefu.git
Cloning into 'cskefu'...
remote: Enumerating objects: 17039, done.
remote: Counting objects: 100% (1213/1213), done.
remote: Compressing objects: 100% (239/239), done.
remote: Total 17039 (delta 1006), reused 1017 (delta 940), pack-reused 15826
Receiving objects: 100% (17039/17039), 27.95 MiB | 11.34 MiB/s, done.
Resolving deltas: 100% (10337/10337), done.

好了,以上我们就可以方便在本地处理春松客服的代码了.

如何与主仓库联动

Github 提供友好了的 ContributeSync fork 的功能,鼠标点击即可完成进行同步主库的更新以及创建 PR 了。

不过,如果只是 Sync fork ,每次需要打开 github 仓库,有些不方便,这里可以采用增加 主库为 upstream 的方式,在本地完成更新

# 添加 upstream
samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop✔)
± git remote add upstream https://github.com/cskefu/cskefu.git

# fetch upstream 的更新
samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop✔)
± git fetch upstream develop

# pull upstream 的更新
samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop✔)
± git pull upstream develop
Alias tip: gl upstream develop
From https://github.com/cskefu/cskefu
 * branch              develop    -> FETCH_HEAD
Already up to date.

# push upstream 的更新到 fork repo
samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop✔)
± git push origin develop
Alias tip: gp origin develop
Everything up-to-date

以上建议每次在需要更新代码时,记得主动 fetch 和 pull 主仓库的更新,因为在我们贡献的同时,也有很多其他的伙伴在贡献。

签署 DCO

DCO 是春松客服采用的开源协作协议,将会有效的保证全体开发者的权益,这在以Github 的的开源项目协作中是一个常见的协作方式,会在每个 Pull request 中实现校验,所以需要您在提交 PR 时,同时对您的 Commit 进行 DCO 签名。

生成 GPG 密钥

如果您之前未曾操作过类似的内容,您可能需要先进行 GPG key 的生成,并添加到您的 Github 账号内。

gpg --list-secret-keys --keyid-format=long

使用以上命令,可以查看本地是否有 gpg key,如果有,您可以略过此步骤。

不同的 OS版本之中,gpg 指令的版本会有些差异;如果您使用的是 2.1.17 或更高版本,请粘贴以下文本以生成 GPG 密钥对。gpg --full-generate-key如果使用的不是 2.1.17 或更高版本,请粘贴以下文本 gpg --default-new-key-algo rsa4096 --gen-key

  • 在提示时,指定要生成的密钥类型,或按 Enter 键接受默认的 RSA and RSA
  • 输入所需的密钥长度,密钥必须至少是 4096
  • 输入密钥的有效时长,按 Enter 键将指定默认选择,表示该密钥不会过期
  • 验证您的选择是否正确,输入您的用户 ID 信息

要求输入电子邮件地址时,请确保输入你 GitHub 帐户的经验证电子邮件地址

要保持电子邮件地址私密,请使用 GitHub 提供的 no-reply 电子邮件地址

  • 输入安全密码
  • 使用 gpg --list-secret-keys --keyid-format=long 命令列出您拥有其公钥和私钥的长形式 GPG 密钥,签名提交或标记需要私钥
  • 从 GPG 密钥列表中复制您想要使用的 GPG 密钥 ID 的长形式。 在此例中,GPG 密钥 ID 是 3AA5C34371567BD2

然后,我们使用上图中获取到GPG key ID,就可以获取到具体的秘钥内容了。

gpg --armor --export # 注意替换成你的 gpg key id

上传 GPG 秘钥到 Github 账号

我们在 Github 中打开个人账号的设置页面,找到 SSH and GPG keys 这个菜单,进入后,可以查看到下方一个 GPG keys;此时,我们只需要选择 New GPG key,然后将我们自己生成的 gpg 秘钥内容上传到 Github 即可

上传到 Github 之后,我们在后续项目提交时,就可以对 Commit 进行签名了。

在git commit 时进行DCO签名

细心的同学可能会发现,在查看项目的 commit 记录时,一些人的提交会带有 Verifed 的标识,这说明这些 commit 已经完成了 DCO 的签名,下面我来带着大家进行一次签名操作。

resize,w_960,m_lfit

首先,我们在本地完成代码内容更新,并已经采用 git add 将所有需要提交的内容添加git 暂存区完成。

然后,我们在 git commit 时,添加 -s 参数,这个参数的目的就是在 commit 时,进行签名。

samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop!)
± git status 
Alias tip: gst
On branch develop
Your branch is up to date with 'origin/develop'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
        new file:   README_en.md

samzonglu at samzongs-MacBook-Pro in ~/Git/cskefu/cskefu(develop!)
# 下方为执行签名命令
± git commit -s -m "update README.md and add english version"
[develop ce7e862e] update README.md and add english version
 2 files changed, 20 insertions(+)
 create mode 100644 README_en.md

然后我们将本地的变更推送到 远端 我们自己的仓库

git push origin develop

此时,我们打开网页会发现,提示我们 有比主仓库更新的 commit 记录,我们可以按照下图的操作,进入的 提交 Pull Request 界面

resize,w_960,m_lfit

提交成功后,即可看到下面的界面;细心的同学会发现在我们的 commit message 内多了一行,signed-off-by 这就是说明我们已经成功的提交了 DCO 的签名。

我们可以在 PR 的详情页面看到,DCO 的检测结果:

如果我们没有正确签名的话,则会提示如下内容:

此时我们应该去进行补充 DCO 签名,点击对应 DCO 的右侧 Details 就可以看到具体的操作方式.

好了,以上就是全部今天介绍的内容, DCO 签署的整个过程还是非常方便的,相信您一定可以顺利成功,春松客服期待着您的贡献。

本文原创,作者:船长,其版权均为春松客服所有。
如需转载,请注明出处:https://www.cskefu.com/2022/10/30/how-to-sign-dco-for-pr/