FreeBSD Port 开发者手册
FreeBSD 中文社区
  • 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 提供支持

FreeBSD 中文社区

在本页

这有帮助吗?

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

11.1.使用 Git 制作补丁

当port不是作者提供的最新版本时,请更新/usr/ports的本地工作副本。port可能已经更新到新版本。

当处理超过几个ports时,使用 Git 来保持整个ports的最新状态可能更容易,如《使用Ports》中所述。这将额外带来跟踪所有port依赖项的好处。

下一步是查看是否已经有待处理的更新。为此,有两个选项。有一个可搜索的界面可访问 FreeBSD 问题报告(PR)或错误数据库。在 Product 多选菜单中选择 Ports & Packages ,并在 Summary 字段中输入port的名称。

如果没有待处理的 PR,下一步是给port的维护者发送电子邮件,如 make maintainer 所示。该人可能已经在进行升级,或者由于某种原因目前不需要升级port(例如,由于新版本的稳定性问题),因此没有必要重复他们的工作。请注意,未维护的ports将列出维护者为 ports@FreeBSD.org ,这只是一般ports邮件列表,因此在这种情况下发送邮件可能不会有所帮助。

如果维护者要求你升级,或者没有维护者,请通过使用基本系统中的 diff(1) 命令来帮助 FreeBSD 准备更新!

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

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

否则,要么使用 git diff 方法(使用 Git 制作补丁),要么将 port 的内容复制到一个完全不同的目录,并使用新旧 ports 目录的递归 diff(1) 输出的结果(例如,如果修改后的 port 目录称为 superedit,原始目录在我们的树中称为 superedit.bak,则保存 diff -ruN superedit.bak superedit 的结果)。 统一或上下文差异都可以,但 port 提交者通常更喜欢统一差异。 注意使用 -N 选项-这是强制 diff 正确处理添加新文件或删除旧文件的情况的接受方式。 在发送给我们 diff 之前,请检查输出以确保所有更改都是合理的(特别是,请确保首先使用 make clean 清理工作目录)。

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

如果port未得到维护,并且你正在积极使用它,请考虑自愿成为其维护者。FreeBSD 有超过 4000 个ports没有维护者,这是一个始终需要更多志愿者的领域。(有关维护者责任的详细描述,请参阅开发者手册中的章节。)

要提交差异,请使用 bug 提交表单(产品 Ports & Packages ,组件 Individual Port(s) )。始终在问题的类别名称后面加上冒号和简要描述。示例: category/portname: add FOO option ; category/portname: Update to X.Y 。请在消息中提及任何添加或删除的文件,因为在提交时必须明确指定给 git(1)。不要压缩或编码差异。

在提交 bug 之前,请查看《编写问题报告》部分。其中包含有关如何编写有用问题报告的更多信息。

现在所有这些都完成了,请阅读有关如何保持最新的内容在《保持更新》中。

11.1. 使用 Git 制作补丁

在可能的情况下,请提交一个 git(1) 补丁或差异。它们比 "新旧" 目录之间的差异更容易处理。更容易看到发生了什么变化,并在Ports自工作开始以来有所修改,或者提交者要求修复某些内容时更新差异。此外,使用 git-format-patch(1) 或 git-diff(1) 生成的补丁可以轻松地使用 git-am(1) 或 git-apply(1) 应用,并将为提交者节省一些时间。最后,使用 git-format-patch(1) 生成的 git 补丁包括你的作者信息和提交消息。这些将记录在存储库的日志中,这是提交更改的推荐方式。

% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir   
% cd ~/my_wrkdir
当然,这可以放在任何地方。构建ports不限于在 /usr/ports/ 内。

git.FreeBSD.org 是 FreeBSD 公共 Git 服务器。有关更多信息,请参阅 FreeBSD Git 存储库 URL 表。

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

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

确保使用测试 Port 和检查 Port 的清单来检查 Port。

同时,在 distinfo 中更新校验和参考 make makesum 。

在制作补丁之前,获取最新的存储库并在其之上重新应用更改。仔细观察并遵循输出。如果任何文件未能重新应用,则意味着在你编辑相同文件时上游文件发生了更改,需要手动解决冲突。

% git fetch origin main
% git rebase origin/main

检查为补丁暂存的更改:

% git status
% git diff --staged

最后一步是制作更改的统一差异或补丁:

使用 git-format-patch(1) 生成补丁:

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

这将生成一个名为 0001-foo.patch 的补丁。这是首选方式,因为它会包含作者身份信息,而且在进行一系列不打算合并在一起的更改时也更容易。

或者,使用 git-diff(1) 生成统一 diff:

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

这将生成一个名为 foo-1.2.3.diff 的差异。其中 foo 将被替换为提交消息的第一行,即提交消息的主题。

创建补丁后,你可以切换到主分支开始其他开发。

% git checkout main

一旦补丁被接受并合并,如果你愿意,可以删除本地开发分支:

% git branch -D my_branch

按照问题报告提交指南发送修补程序。

最后更新于2天前

这有帮助吗?