FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • FreeBSD Port 开发者手册翻译项目
  • 编辑日志
  • 译者说明
  • FreeBSD Port 开发者手册
    • FreeBSD Port 开发者手册
  • 第 1 章 简介
    • 1.1.简介
  • 第 2 章 制作新的 port
    • 2.1.制作新的 port
  • 第 3 章 简单的 port
    • 3.1.编写 Makefile
    • 3.2.编写描述文件
    • 3.3.创建校验和文件
    • 3.4.测试 port
    • 3.5.用 portlint 来检查 port
    • 3.6.提交新的 port
  • 第 4 章 复杂的 Port
    • 4.1 Port 工作原理
    • 4.2.获取源代码
    • 4.3.修改 port
    • 4.4.打补丁
    • 4.5.配置
    • 4.6.处理用户输入
  • 第 5 章 配置 Makefile
    • 5.1.原始来源
    • 5.2.命名
    • 5.3.归类
    • 5.4.源代码包文件
    • 5.5.维护者(MAINTAINER)
    • 5.6.一句话说明(COMMENT)
    • 5.7.项目网站
    • 5.8.许可证
    • 5.9.PORTSCOUT
    • 5.10.依赖
    • 5.11.从属 port 和 MASTERDIR
    • 5.12.man 手册
    • 5.13.info 文件
    • 5.14.Makefile 参数
    • 5.15.特殊的工作目录
    • 5.16.解决冲突
    • 5.17.安装文件
    • 5.18. 使用 BINARY_ALIAS 来重命名命令,而不是在编译中打补丁
  • 第 6 章 特殊情况
    • 第 6 章 特殊情况
  • 第 7 章 Flavors
    • 7.1.Flavors 简介
    • 7.2.使用 FLAVORS
    • 7.3.USES=php 和 Flavors
    • 7.4.USES=python 和 Flavors
    • 7.5.USES=lua 和 Flavors
  • 第 8 章 高级 pkg-plist 实践
    • 8.1.根据 make 变量对 pkg-plist 进行修改
    • 8.2.空目录
    • 8.3.配置文件
    • 8.4.动态与静态软件包列表
    • 8.5.自动创建软件包列表
    • 8.6.用关键词扩展软件包列表
  • 第 9 章 pkg-*
    • 9.1.pkg-message(安装二进制包时显示的消息文件)
    • 9.2.pkg-install、pkg-pre-install 和 pkg-post-install(安装二进制包时执行的脚本文件)
    • 9.3.pkg-deinstall、pkg-pre-deinstall 和 pkg-post-deinstall(卸载时执行的脚本文件)
    • 9.4.修改 pkg-* 文件的名字
    • 9.5.使用 SUB_FILES 和 SUB_LIST
  • 第 10 章 测试 port
    • 10.1.运行 make describe
    • 10.2.运行 make test
    • 10.3.Portclippy / Portfmt
    • 10.4.Portlint
    • 10.5.Port 工具
    • 10.6.PREFIX 和 DESTDIR
    • 10.7.Poudriere
    • 10.8.调试 port
  • 第 11 章 升级 port
    • 11.1.使用 Git 制作补丁
    • 11.2.UPDATING 和 MOVED
  • 第 12 章 安全
    • 12.1.安全为何如此重要
    • 12.2.修复安全漏洞
    • 12.3.向社区通报情况
  • 第 13 章 该做什么和不该做什么
    • 第 13 章 该做什么和不该做什么
  • 第14章 一个简单的 port
    • 第 14 章 一个简单的 port
  • 第 15 章 在 Port Makefile 中变量的顺序
    • 第 15 章 在 Port Makefile 中变量的顺序
  • 第 16 章 保持更新
    • 第 16 章 保持更新
  • 第 17 章 使用 USES 宏
    • 第 17 章 使用 USES 宏
  • 第 18 章 __FreeBSD_version 的值
    • 第 18 章 __FreeBSD_version 的值
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
在GitHub上编辑
导出为 PDF
  1. 第 11 章 升级 port

11.1.使用 Git 制作补丁

上一页10.8.调试 port下一页11.2.UPDATING 和 MOVED

最后更新于18天前

当某 Port 不是作者发布的最新版本时,请更新本地工作副本 /usr/ports。该 Port 可能已经被更新到新版本。

如果要处理多个 Port,使用 Git 来保持整个 Ports 最新可能会更加方便,正如在 中所描述的。这还可以跟踪所有 Port 的依赖项。

接下来的步骤是检查是否已经有一个更新待处理。为此,有两种方法。可以通过可搜索的界面访问 ,在 Product 的多选菜单中选择 Ports & Packages,然后在 Summary 字段中输入 Port 的名称。

如果没有待处理的 PR,接下来的步骤是向 Port 的维护者发送电子邮件,如通过 make maintainer 显示的那样。维护者可能已经在进行升级,或者有不升级该 Port 的理由(例如新版本可能存在稳定性问题),这时就没有必要重复他们的工作。注意,未维护的 Ports 会列出 ports@FreeBSD.org 作为维护者,这是一个通用的 Ports 邮件列表,因此在这种情况下发送邮件可能没有帮助。

如果维护者要求你进行升级,或者该 Port 没有维护者,那么可以帮助 FreeBSD 准备更新!可以使用基本系统中的 命令来完成。

要为单个补丁创建合适的 diff,将需要修补的文件复制为 something.orig,保存更改为 something,然后创建补丁:

% diff -u something.orig something > something.diff

否则,可以使用 git diff 方法(请参阅 )或者将 Port 的内容复制到另一个目录,并使用新的和旧的 Port 目录的递归 输出结果(例如,如果修改过的 Port 目录称为 superedit,原目录为 superedit.bak,则保存 diff -ruN superedit.bak superedit 的结果)。统一或上下文 diff 都可以,但 Port 提交者通常更喜欢统一格式的 diff。注意使用 -N 选项——这是处理新文件添加或旧文件删除的标准方法。在提交 diff 之前,请检查输出,确保所有更改都合理。(特别是,确保首先使用 make clean 清理工作目录。)

注意

如果有文件被添加、复制、移动或删除,请将此信息添加到问题报告中,以便提交补丁的提交者知道需要执行哪些 命令。

为了简化常见的补丁操作,可以使用 make makepatch,如在 中所述。还可以使用其他工具,如 /usr/ports/Tools/scripts/patchtool.py。在使用之前,请阅读 /usr/ports/Tools/scripts/README.patchtool。

如果该 Port 没有维护者,并且你正在积极使用它,请考虑自愿成为它的维护者。FreeBSD 有超过 4000 个没有维护者的 Ports,这是一个总是需要更多志愿者的领域。(有关维护者职责的详细描述,请参阅 章节。)

要提交 diff,请使用 (产品 Ports & Packages,组件 Individual Port(s))。始终在 Port 名称后附上类别,并简要描述问题。例如:category/portname:<span> </span>add FOO option;category/portname:<span> </span>Update to X.Y。请在消息中提到任何添加或删除的文件,因为在提交时需要明确指定这些文件给 。不要压缩或编码 diff。

在提交问题报告之前,请查看 章节中的问题报告编写指南。它包含了有关如何编写有用问题报告的更多信息。

重要

如果升级是出于安全考虑或当前提交的 Port 存在严重缺陷,请通知 Ports 管理团队 <>,以请求立即重新构建和重新分发该 Port 的包。否则,使用 pkg 的用户将继续通过 pkg install 安装旧版本,可能会持续几周。

注意

请使用 或 git diff 来创建现有 Ports 的更新。其他格式可能包括整个文件,使得无法仅查看更改内容。当没有包含 diff 时,整个更新可能会被忽略。


% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir  ①②
% cd ~/my_wrkdir
  • ① 当然,这个路径可以是任何位置。构建 Ports 并不限于 /usr/ports/。

在 Port 目录中,进行必要的更改。如果是添加、移动或删除文件,请使用 git 来跟踪这些更改:

% git add new_file
% git mv old_name new_name
% git rm deleted_file

同时,使用 make makesum 更新 distinfo 中的校验和引用。

在制作补丁之前,获取最新的仓库并将更改 rebase 到其之上。仔细观察并跟踪输出。如果有任何文件 rebase 失败,意味着在你编辑同一个文件时,源文件发生了变化,需要手动解决冲突。

% git fetch origin main
% git rebase origin/main

检查待提交的更改:

% git status
% git diff --staged

最后一步是生成统一的 diff 或补丁:

% git checkout -b my_branch
% git commit
% git format-patch main

这将生成一个类似于 0001-foo.patch 的补丁文件。这是推荐的方式,因为它包含了作者身份信息,而且当你进行一系列不打算合并在一起的更改时也更方便。

% git diff --staged > ../`make -VPKGNAME`.diff

这将生成一个类似于 foo-1.2.3.diff 的 diff 文件,其中 foo 替换为提交消息的第一行,即提交消息的主题。

补丁创建完成后,你可以切换回主分支开始其他开发工作。

% git checkout main

补丁被接受并合并后,你可以删除本地开发分支(如果你想的话):

% git branch -D my_branch

注意

完成这些工作后,请阅读 中关于如何保持更新的内容。

如果可能,请提交 补丁或 diff。相比于“新旧”目录之间的 diff,它们更容易处理。这样更容易看到变更内容,并且如果在开始工作后 Ports 集合中有所修改,或者提交者要求修复某些内容,可以更容易地更新 diff。此外,使用 或 生成的补丁,可以通过 或 轻松应用,并节省提交者的一些时间。最后,通过 生成的 Git 补丁包含你的作者信息和提交消息。这些信息将记录在仓库的日志中,这是提交更改的推荐方式。

② 是 FreeBSD 的公共 Git 服务器。有关更多信息,请参阅 。

确保使用 和 中的检查清单来检查该 Port。

要使用 生成补丁:

另外,要使用 生成统一的 diff,可以执行:

如果文件已添加、移动或删除,请包含使用的 add、mv 和 rm 命令。必须在补丁应用之前运行 git mv。应用补丁后,必须运行 git add 或 git rm。

按照 提交补丁。

Using the Ports Collection
FreeBSD 问题报告(PR)或 bug 数据库
diff(1)
Using Git to Make Patches
diff(1)
git(1)
Patching
Developer’s Handbook
bug 提交表单
git(1)
Writing the problem report
portmgr@FreeBSD.org
diff(1)
Keeping Up
git(1)
git-format-patch(1)
git-diff(1)
git-am(1)
git-apply(1)
git-format-patch(1)
git.FreeBSD.org
FreeBSD Git Repository URL Table
Testing the Port
Checking the Port with portlint
git-format-patch(1)
git-diff(1)
git(1)
问题报告提交指南