贡献
贡献方式
你可以通过多种方式参与到 PLC4X 项目中来。
通常包括但不限于以下几种:
- 提交 Pull Request
- 提交 Bug 报告
- 在我们的邮件列表中积极交流
- 推广该项目(撰写文章、博客、在会议上做演讲)
- 编写文档
我们是一个非常友好的团队,不要害怕主动站出来。
提交
我们采用 约定式提交。由于 plc4x 是一个单一的多语言仓库,我们通常将 scope 定义为 …(plc4[language shortcut here]/subcomponent)(例如,Golang 部分中 Bacnet 的一个新功能,其提交信息为 feat(plc4go/bacnet): cool new feature for…)。
Pull Request
提交代码变更最简单的方式,是通过 GitHub pull request。
要完成此操作,首先需要创建一个 GitHub 账户并登录你的账户。
完成之后,请前往我们的 GitHub 站点 并创建一个所谓的 Fork。

此时 GitHub 会在你的账户中创建 PLC4X 仓库的完整副本。只有你可以向这个副本提交代码。
接下来,理想情况下你应该检出你克隆的仓库:
git clone https://github.com/{your-user-id}/plc4x.git现在你已经在电脑上拥有了一份 PLC4X 的副本,你可以随意修改它;因为这是你自己的副本,所以你甚至可以放心地提交这些更改,不必担心弄坏任何东西。
当你完成修改并希望我们查看时,就该创建所谓的 Pull-Request 了。
具体做法是前往你在 GitHub 上的分叉仓库页面。
每个分叉仓库都会多出一个名为「New Pull Request」的按钮:

点击它之后,我们会收到关于你更改的通知,并可以对其进行评审。我们还可以讨论你的更改,并让你在我们接受并合并到 PLC4X 之前完善你的拉取请求。
AI 辅助与 AI 生成的拉取请求
AI 编程助手让编写拉取请求变得容易了许多,而这类拉取请求的数量也在稳步增长。在提交之前,请先阅读本节内容。
PLC4X 由极少数人维护。评审一个拉取请求所花费的时间远多于你生成它所花的时间:我们必须理解这项更改,依据协议规范以及可能需要从柜子里翻出来的硬件对其进行评估,检查它在多语言单体仓库中可能带来的副作用,并在之后为其承担责任。大多数由 AI 生成的拉取请求并非错误——问题在于它们到来的速度超过了我们这几个人的处理能力,这已经成为该项目一个真正的压力来源。
我们要明确说明我们所作的区分:
- 如果你使用 AI 是为了弥补自身工具箱的不足,我们非常欢迎。一个典型的例子是:一位对某协议有深刻理解、但 Java 技能较为初级的 OT 工程师——这种协议知识正是本项目所需要的,而我们非常乐意提供指导,帮助你把代码方面做好。
- 如果你是在扫描开源项目、寻找任何可以贡献的地方,以积累「贡献声誉」,那么请选择另一个项目。我们没有评审能力来补贴这种行为。
请先自我介绍
在接受你的拉取请求之前,我们希望你能订阅我们的开发者邮件列表 dev@plc4x.apache.org,并在其中自我介绍:你是谁、你的背景如何,以及你对 PLC4X 有什么兴趣。关于如何订阅,请参见 Getting in Contact 页面。
这并非形式主义。它能告诉我们正在与谁合作、你已经掌握了哪些知识、在哪些方面指导会有所帮助;也正是在这一点上,一次贡献才会从队列中的一项变成一场对话。
未做此类介绍就提交的拉取请求可能会被拒绝。如果这类拉取请求中包含有效的发现,我们保留自行直接应用所提更改的权利,以避免鼓励更多随意的 AI 投稿。
保持你的分叉仓库同步
由于我们一直在持续开发 PLC4X,而你创建的是我们仓库的一份副本,它很快就会过时。
为了让官方仓库获得我们引入的改动,你需要让 git 知道这一点。
你在本地通过添加一个新的所谓 remote 来完成这件事。默认情况下,你克隆来源的远程仓库被命名为 origin。
通常你会把第二个远程仓库命名为 upstream,但一般来说你可以取任何你喜欢的名字。
在命令行(或你选择的 git 图形界面)中添加该远程仓库:
git remote add upstream https://github.com/apache/plc4x.git如果使用以下命令列出所有的远程仓库:
git remote -v它应该输出类似这样的内容:
origin https://github.com/{your-user-id}/plc4x.git (fetch)
origin https://github.com/{your-user-id}/plc4x.git (push)
upstream https://github.com/apache/plc4x.git (fetch)
upstream https://github.com/apache/plc4x.git (push)如果确实如此,你可以继续;如果没有……那么你可以通过我们的开发者邮件列表寻求帮助。
要获取上游仓库的所有变更,只需执行以下命令:
git pull upstream这将从上游获取所有更改并在本地合并。要更新你的 GitHub 版本,你需要将更改推送回 origin。可以通过执行以下命令来完成:
git push(如果未提供远程仓库,git 将默认使用 origin)
Bug 报告
我们使用 GitHub Issues 作为 Bug 与问题跟踪器。
欢迎提交 feature requests、bug reports、patches、comment on issues、……
文档
由于我们的文档和网站是构建过程的副产物,从技术上讲,贡献文档与贡献代码是一样的。
我们所有的内容都用 Asciidoctor 编写,位于 src/site/asciidoc 目录中。关于 Asciidoctor 语法的参考,请查看 Asciidoctor 文档。
分支模型
PLC4X 项目使用以下分支模型。
同样的模型被许多其他项目采用,因此应该非常直观。
release包含最新的已发布状态。- 开发在
develop分支上进行。 - 功能在带有
feature/前缀的功能分支中开发。 - 每个次版本发布都有一个对应的发布分支
rel/1.0.0 - 发布分支只能从
develop派生 - 缺陷修复发布没有专门的发布分支,直接在对应的次版本发布分支上进行
评论
登录后参与评论
KnowForge