在 CentOS 计划我们以 Git 作为首选的版本控制软件。假若你是新手,http://git-scm.com/ 收录了很多好的资源,当中包括入门指南。

CentOS-6 及 7 缺省已包含了 Git,而 CentOS-5 则由 EPEL 提供。

CentOS 计划把源码收录于 git.centos.org,而我们视该处为本计划的权威性上游。不同的项目,作为计划的一部份,也许会选择把他们的内容映射到其它地方,例如 Github。然而所有发行的内容必须创建自 git.centos.org,并在该处测试和保管。

Git.CentOS.Org

计划

git.centos.org 上的源码以个别 rpm 或角色组织成独立的 git 源码库。这些源码库再组成「计划」。最主要的「计划」名为 rpms/ ,它涵盖我们创建和发行的所有 rpms 的源码库。你可以在 https://git.centos.org/project/rpms 查看这个计划。

一般来说,每个 SIG 都会拥有个别的计划。此做法容许他们在自己的范围内加入非 rpm 的内容(例如:测试工具、管理界面、脚本、等等);SIG 多数都拥有这些计划的管理权限。

Git 的组织

Git 源码库,特别是那些含有 rpm 内容的,都以对应 CentOS 发行名称的分支作为组织。例如:你可以在 c7 这个分支内找到 CentOS Linux 7 所发行的内容。同样地 c5 及 c6 分支名称对应 CentOS-5 及 CentOS-6。在正常情况下,MASTER 或 HEAD 分支内不会藏有任何内容,唯独是一个文档显示在哪里可找到实际源码。当改动 SIG 的专用组件时,我们推荐把源码提交到一个以该 SIG 的名称(或该 SIG 在 git.centos.org 上的计划名称)而命名的分支。这样不单止容许别人查看及跟踪他们所关注的源码历史,更能让别人在不污染发行目录的情况下创建独立的 fork 和分支。

非文字源文件

我们只将文字源码提交给 git。所有非文字源文件皆被抽起,计算散列码(sha256sum)并上载至 https://git.centos.org/sources/ 的专用缓存区内。它们被编进对应 git 分支的组别,然后再以所属的 git 源码库分组。因此这些非文字源文件的全路径是 https://git.centos.org/sources/<git 源码库名称>/<分支名称>/。

请留意零长度的文件以特别形式处理,它们不会被提交给 git,也不会被推进缓存区。然而这些文件同样会被跟踪,并通过非文字源文件的中继档获得创建。

每个 git 源码库都拥有一个中继档,名为 .<git 源码库名称>.metadata,并收录在该 git 分支的根目录里。这个文件对应 sha256sum 散列码至他们的整全文件名,而 get_sources.sh 脚本便以它作为输入。

get_sources.sh

有意运用 git.centos.org 及对它作出贡献的用户必须复制及设置 centos-common 源码;它收录在 https://git.centos.org/summary/?r=centos-git-common.git

复制它的 git 指令是:

[user@host]$ git clone  https://git.centos.org/git/centos-git-common.git 

此 git 源码库所收录的东西,包括 get_sources.sh 脚本。当你在一个从 git 检出的 rpm 源码库下执行该脚本时,它会分析非文字源文件的中继档,下载相关文件,并创建 SOURCES/ 目录。你或许会想在 ~/bin 创建连结到该脚本(见以下工作样例)。

样例流程

假设我们想修改 CentOS 的内核源码。

[user@host]$ git clone  https://git.centos.org/git/rpms/kernel.git 
[user@host]$ cd kernel
# 举例说我们要修改 centos7 的内核
[user@host]$ git checkout c7
[user@host]$ ~/bin/get_sources.sh
# 切换至本地目录树作编辑之用
[user@host]$ git checkout -b my-kernel
# 修改 SPEC 档……等
[user@host]$ git commit -m'my local changes' -a
# 确保我们能创建一个 srpm
[user@host]$ rpmbuild --nodeps --define "%_topdir `pwd`" -bs SPECS/kernel.spec
# 要是成功的话,
[user@host]$ rpmbuild --define "%_topdir `pwd`" -ba SPECS/kernel.spec

提交代码至现有的 git 源码库

我们较喜欢以 git format-patch 创建并发送至 centos-devel 邮件列表(http://lists.centos.org/mailman/listinfo/centos-devel )的修正档。就以上文修改的内核源码为例:

[user@host]$ git clone https://git.centos.org/git/rpms/kernel.git
cd kernel
# 举例说我们要修改 centos7 的内核
[user@host]$ git checkout c7
[user@host]$ ~/bin/get_sources.sh
# 切换至本地目录树作编辑之用
[user@host]$ git checkout -b my-kernel
# 修改 SPEC 档……等
[user@host]$ git commit -m 'my local change' -a

请为你想递交的所有 commit 重复这个步骤,最理想是每个 commit 只包含一项功能或改动 —— 并将多项功能分拆至个别的 commit。在你的 commit 信息内利用动词来形容你做了什么亦是个好主意。要是改动是针对某个错误报告,请把它包含在内,并以 #<编号> 作参考。加入所有 commit 后,你可以如此创建修正档:

[user@host]$ git format-patch c7

现在你的工作目录内应该含有名为 0001-<commit>.patch、0002-<commit>.patch、等……的文件;你应该把这些文件以附件(即不是嵌入)形式发送到 centos-devel 邮件列表。请提供信息关于你想改动什么,有必要的话请也提供 bugs.centos.org 内指向 http://lists.centos.org/mailman/listinfo/centos-devel 并拥有你的电邮地址的存档邮件。

Translation of revision 13

zh/Sources (last edited 2015-03-06 16:01:17 by TimothyLee)