Git 使用指南
本文档介绍了 Rocky 企业软件基金会 (RESF) 如何在其生态系统中处理 Git 的使用,包括 RESF 及其项目(如 Rocky Linux)。它包含有关各个团队和社区如何与 Git 交互和协作的信息,以及期望和要求。
联系信息¶
所有者 | 发布工程 (SIG/核心)/基础设施 |
Mattermost 联系人 | @label @mustafa @skip77 @sherif @pgreco @neil @tgo |
Mattermost 频道 | ~development ~infrastructure |
IRC 频道 | #rockylinux-devel #rockylinux-infra |
IRC 联系人 | Sokel neil tg |
一般信息¶
Git 是 Rocky Linux 构建生态系统和 RESF 项目的核心组件,因此也是发行版和可用软件开发流程的一种模式。
Gitea 用于 RESF、其项目、其代码、镜像存储库以及可能的其他组件。
GitLab 是当前用于存储大部分 RPM 规范文件、补丁、用于软件包去品牌化/修改的配置以及一些脚本/实用程序的软件。通常源代码不会存储在此处,除非是 src-git 场景。
GitHub 用于 RESF 和 Rocky Linux 项目组织,其中可能包含品牌、脚本/工具/实用程序或少量其他有用的代码(如 ansible)。也可能存在上游项目的 fork(如 mock),用于处理对 Fedora 项目(如 EPEL)的上游更改。
期望¶
本节介绍使用 Git 服务的期望。
一般期望¶
大部分这些信息都包含在我们的Git 贡献者协议
中,该协议通常涵盖 RESF Git 服务和 Rocky Linux GitLab。但是,我们在此处重复这些信息供所有读者参考。
- 实施审核 - 与 Rocky Linux Mattermost 聊天一样,在 Git 问题或 Bug Tracker 中注意您的语言和措辞非常重要。
- 必须上传有效的 GPG 密钥并用于签署您的提交 - 一般建议签署提交。预计大多数项目都会禁用未签名的提交。
- 不要将 git 视为问题跟踪器 - Rocky Linux 的所有问题都应在我们的 Bug Tracker 中进行跟踪。在撰写本文时,已为构建问题打开了问题。
- 不要在您雇主拥有的系统上执行您的工作或更改。
- 不鼓励创建个人项目(请参阅例外情况)
- 确保您的软件或工作具有有效的开源许可证(请参阅以上相关链接)
应该做和不应该做¶
以下是我们 Git 中应该做和不应该做的事情列表,其中一些内容是在本小节之前或之后重复的信息。将它们放在此处是为了进一步强调。
应该做
- 在需要时分叉存储库并创建拉取请求
- 确保引入 Git 服务的软件/源代码具有有效的开源许可证
- 上传有效的 GPG 密钥并签署您的提交
不应该做
- 将任何 Git 服务视为 Rocky Linux 问题跟踪器
- 在您的命名空间下创建个人项目(请参阅例外情况)
- 在您雇主拥有的系统上执行您的工作或更改
例外情况¶
在您的命名空间下创建个人项目的例外情况是,代码将以某种方式用于 Rocky 生态系统,无论是直接还是间接(例如,对于 people.rocky)。这也可以是使用 Peridot 作为类似 COPR 的服务的情况。
源代码(针对 SIG 或其他软件)¶
待补充。
SIG 小组 + 项目¶
本节介绍 Rocky Linux Git 服务中存在的 SIG 小组和项目。SIG 可能具有 RPM 规范、脚本,甚至他们自己的软件。以下部分将介绍这些小组和项目的格式和期望。
一般概述¶
SIG 是特别兴趣小组。SIG 是 Rocky 社区中较小的群体,专注于一小部分问题,或仅仅是为了提高对主题的认识或关注。本节不涵盖 SIG 存在的要求。
通常,SIG 最终可能会拥有包含可以添加到 Rocky Linux 系统中的软件包的存储库。但是,一些 SIG 的功能并非如此。如果它们确实以这种方式运行,它们通常会在 Rocky Linux GitLab 中的 SIG 小组下有一个部分。
SIG 将始终在 RESF Git 服务中拥有一个组织。
结构(打包)¶
使用RPM 结构作为指南,总体思路相同。可能不需要patch
小组,但可能很有用。SIG 可以设置其小组的方式示例如下
.
└── SIG
└── messaging
├── modules
├── rpms
│ └── somemq
└── somemq
在此示例中,软件somemq
的源代码位于SIG
下的messaging
子组下。然后,该 SIG 的该软件的 RPM 规范将按预期位于rpms
下。但是,您可以根据需要进一步组织此内容。
.
└── SIG
└── messaging
├── modules
├── rpms
│ └── somemq
└── sources
└── somemq
这不是严格的要求,但可能有利于组织目的。
访问 SIG 小组¶
通常通过联系赞助商(在帐户服务中找到)并请求访问权限以成为 SIG 的一部分来获得 SIG 小组访问权限。将您添加到小组以及gitusers
小组后,您将能够在 SIG 中工作。
其他小组¶
其他小组通常不会存在于 Rocky GitLab 实例中。相反,它们将(并且应该)存在于 RESF Gitea 实例中。这些小组可能包含以下存储库
- 团队的源代码
- 团队的一组工具或脚本
- 其他杂项元数据
小组示例包括
- 基础设施 -> 此小组包含与 Rocky 基础设施相关的存储库
- releng -> 发布工程存储库和代码
- sig_core -> 核心特别兴趣小组,专门用于与 Rocky Linux 开发和基础设施相关的代码和项目
RPM 系统¶
本节介绍 RPM 系统,例如导入、修补以及它最终如何构建成二进制 RPM。这在git.rockylinux.org上发生。
当前 RPM 结构¶
当前的 RPM 结构旨在允许协调程序工具导入源代码,并在需要时相应地对其进行修补。它还允许 AppStream 模块得到支持,并通过其所需的 YAML 文件进行管理。
有四个主要小组
- original:包含来自 Rocky 的 RPM 规范数据,例如版本和徽标
- staging:包含用于暂存通道的 RPM 规范数据,例如测试工具的正常运行和功能,以及测试构建过程。
- release:包含用于发布通道的 RPM 规范数据,这将是用户实际使用的版本。
.
├── original
│ ├── modules
│ ├── patch
│ └── rpms
├── release
│ ├── modules
│ ├── patch
│ └── rpms
└── staging
├── modules
├── patch
└── rpms
每个组包含三个子组
-
modules 组用于存储包含 YAML 文件的仓库。YAML 文件定义了 AppStream 仓库中存在的模块。
-
patch 组用于保存 distrobuild 的配置,以便其在与 RPM 相关时进行补丁或执行其他任务。
-
rpms 组用作 RPM 规范文件和补丁的最终输出/导入,在打补丁(如果适用)之后,然后用于/选取构建 SRPM 并发送到 koji 进行构建。
-
src 组(虽然不是必需的)可以是包源代码所在的位置,以便在需要时帮助创建补丁。
请注意,计划使用构建系统的 SIG 或项目应遵循此方法。
RPM 补丁结构¶
对于补丁配置,必须严格遵循布局以确保相应地修改 SPEC 文件或其源代码。下面是一个示例。
.
└── ROCKY
├── CFG
│ └── browser.cfg
└── _supporting
├── Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
├── Bug-1526653---fix_user_vfp_armv7.patch
└── firefox-rocky-default-prefs.js
在顶层,ROCKY 文件夹将包含两个其他文件夹,CFG 和 _supporting。
CFG 目录将包含以 .cfg
结尾的文件,这些文件告诉协调器对以操作形式传入的导入执行哪些操作。
Action {
file: "OriginalFile"
with_file: "ROCKY/_supporting/RockyReplaceFile"
}
这将在我们的 Debrand 如何操作 页面中进行更详细的说明。
分支策略¶
通常在创建 patch 仓库时,main
分支是所有内容都应该存在的地方。但是,在某些情况下,这并不够,尤其是在主要发行版版本差异的情况下。以下是一般思路/示例,说明分支的工作方式
main
是在打补丁期间始终使用的通用分支r8
是 Rocky 8 分支,专门用于为 8 打补丁相应的 RPM 规范/补丁r9
将用于 Rocky 9r9-beta
将用于 Rocky 9 beta- 等等…
在实践中,当补丁过程发生时,首先解析并应用 main
分支,然后如果存在相应的 rX
分支,则会接下来应用该分支。也有一些情况,main
可以为空,并且您只需使用 rX
分支。这是可以接受的,并且仍然有效。
请注意,使用此策略,在大多数情况下不建议合并分支。尽量使它们尽可能地保持分离,并在绝对必要时进行分离。仅当从 rXlh
转到 rX-beta
或 rX-beta
转到 rX
时,才应合并或强制推送分支。
提交潜在的补丁¶
有几种方法可以提交补丁来修复主发行版中的构建问题。本节将分解一些您可以提出修复请求以供审查的示例。
补丁仓库不存在¶
如果某个包失败,或者您希望提交补丁(例如,允许某些内容在其他架构(例如 armv7
/armhfp
)上正确编译),或者您发现基础中的一块没有正确地去除品牌,通常应该在我们的 Bug Tracker 中打开一个错误报告,并提供相关信息和日志。可以在您的命名空间下打开一个项目,并在审查后最终将其转移到 staging
中。
补丁仓库存在¶
如果某个包由于当前补丁失败而失败,或者需要新的补丁,也许必须进行去除品牌,您通常会
- 将仓库分叉到您的命名空间
- 进行相关的更改
- 申请合并请求/拉取请求
应该打开一个适当的错误跟踪票证(如果尚未打开或自动打开),以确保此更改有文档记录。
资源
URL: https://accounts.rockylinux.org
用途: 账户服务维护 Rocky 生态系统中几乎所有组件的账户。
技术: Fedora 基础设施使用的 Noggin
联系方式: Mattermost 中的 ~Infrastructure
和 Libera IRC 中的 #rockylinux-infra
URL: https://git.resf.org
用途: Rocky 企业软件基金会的通用项目、代码等。
技术: Gitea
联系方式: Mattermost 中的 ~Infrastructure
、~Development
和 Libera IRC 中的 #rockylinux-infra
、#rockylinux-devel
URL: https://git.rockylinux.org
用途: Rocky Linux 发行版的软件包和轻量级代码
技术: GitLab
联系方式: Mattermost 中的 ~Infrastructure
、~Development
和 Libera IRC 中的 #rockylinux-infra
、#rockylinux-devel
URL: https://mirrors.rockylinux.org
用途: 用户可以申请成为镜像以托管 Rocky 内容(SIG 或基础操作系统)
技术: MirrorManager 2
联系方式: Mattermost 中的 ~Infrastructure
和 Libera IRC 中的 #rockylinux-infra
用途: 用户可以订阅并与 Rocky 生态系统的各种邮件列表进行交互
技术: Mailman 3 + Hyper Kitty
联系方式: Mattermost 中的 ~Infrastructure
和 Libera IRC 中的 #rockylinux-infra