22.3 如何参与 FreeBSD 开发

方法概述

翻译文档、提交 Port 都是不错的方法,提交 Bug 也是可行的方案。

首先需要阅读一下:https://wiki.freebsd.org/Phabricator

文档中说明得很清楚,需要先注册一个账号,并且可以关联 GitHub。但关联后你的用户名可能会显示得不太常见。

对于代码问题,一种较简单的解决方案是通过 GitHub Fork 原仓库的主分支(main),保持主分支不变,然后创建一个新的分支 B,用于开发和修改。

在完成修改或开发后,将 main 分支和 B 分支同步到最新状态(可在网页上点击更新按钮),然后在分支 B 下执行以下命令:

git pull   # 在当前分支下拉取远程更新
git checkout B   # 切换到分支 B
git diff -U999999 origin/main > 2023-1-24.diff   # 在分支 B 下生成与远程 main 分支的差异,并保存到 2023-1-24.diff 文件

完整的操作示例

root@generic:~ # git clone https://github.com/ykla/freebsd-ports # 克隆 ykla/freebsd-ports 仓库到本地
you have mail
Cloning into 'freebsd-ports'...
remote: Enumerating objects: 6264931, done.
remote: Counting objects: 100% (15563/15563), done.
remote: Compressing objects: 100% (9249/9249), done.
remote: Total 6264931 (delta 6507), reused 14986 (delta 6260), pack-reused 6249368 (from 1)
Receiving objects: 100% (6264931/6264931), 2.12 GiB | 10.73 MiB/s, done.
Resolving deltas: 100% (3615966/3615966), done.
Checking objects: 100% (16777216/16777216), done.
Updating files: 100% (161546/161546), done.
root@generic:~ # cd freebsd-ports/
root@generic:~/freebsd-ports # git branch -a # 查看分支
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/rpi-firmware
root@generic:~/freebsd-ports # git checkout rpi-firmware # 切换到 rpi-firmware 分支,这是我自己通过 Github 网页创建的分支
branch 'rpi-firmware' set up to track 'origin/rpi-firmware'.
Switched to a new branch 'rpi-firmware'
root@generic:~/freebsd-ports # git diff -U999999 origin/main > 2024.diff # 生成与远程 main 分支的差异,并保存到 2024.diff 文件中
root@generic:~/freebsd-ports # ls -l 2024.diff
-rw-r--r--  1 root wheel 18021 Oct  6 03:59 2024.diff

这样会在分支 B 的根目录下生成 .diff 文件,将其上传到 此链接(字体较小,请注意右上角位置),然后点击右上角的 Create 并填写相关信息,即可进行代码审阅。

这是一个相对简单的方法。需要注意,每次提交的修改量不宜过大。

提交完成后,在 https://bugs.freebsd.org/bugzilla 新建一个 Bug,说明修改内容,并附上 https://reviews.freebsd.org 的链接。完成后,再在 https://reviews.freebsd.org 中附上该 Bug 页面链接,否则可能长时间无人处理。

技巧

diff 文件不会被视为修改产生的文件,下次生成 diff 时无需提前删除上一次的 diff 文件。

上述操作适用于 FreeBSD 文档源(doc src)和 Ports,还有少部分操作需要在 GitHub 上进行,例如状态报告。

技巧

与相对封闭的 Linux 内核开发不同,任何人都可以参与修改 FreeBSD 的源代码。而 Linux 内核开发则需要向内核维护邮件列表发送邮件,并且必须得到负责人的审核和接受。

附录:一些可能用得到的命令

  • 配置全局 Git HTTP 代理:

  • 列出本地和远程的所有分支:

  • 切换到本地分支 A:

最后更新于

这有帮助吗?