为春松客服贡献代码时签署 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
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 提供友好了的 Contribute
和 Sync 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 的签名,下面我来带着大家进行一次签名操作。
首先,我们在本地完成代码内容更新,并已经采用 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 界面
提交成功后,即可看到下面的界面;细心的同学会发现在我们的 commit message 内多了一行,signed-off-by
这就是说明我们已经成功的提交了 DCO 的签名。
我们可以在 PR 的详情页面看到,DCO 的检测结果:
如果我们没有正确签名的话,则会提示如下内容:
此时我们应该去进行补充 DCO 签名,点击对应 DCO 的右侧 Details
就可以看到具体的操作方式.
好了,以上就是全部今天介绍的内容, DCO 签署的整个过程还是非常方便的,相信您一定可以顺利成功,春松客服期待着您的贡献。