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

CentOS 发行版本预设已包含了 Git。

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

架构

Git 伺服器

https://git.centos.org 现时在 Pagure 上运行,并复制 CentOS 及 Fedora 的分枝。 那两个 pagure 实例同属一个 repoSpanner 丛集:

Upload new attachment "pagure-centos-fedora-cluster.png"

该丛集怎样运作?对于某些项目/git 源码库来说,那些在一个实例中被视为 权威性 的分枝会在丛集中被复制,并出现在另一台 pagure 实例。这亦意味著,由于每个 pagure 实例都采用本身的验证系统,两个 pagure 实例(git.centos.orgsrc.fedoraproject.org)都有保护分枝的措施: 获保謢的分枝计有:

下文解译了,视乎你的 SIG 群组会藉(通过用你的 ACO 帐户),你可以自动获授权存取某些分枝。

提示: 2019 年的 CentOS Dojo 有一个关于此问题的专题讲座。你可以观看该 线上演讲

验证

git.centos.org 的 pagure 实例现在通过 ACO 授权给你去存取该伺服器上的 git 计划。 言下之意就是你必须拥有一个 ACO 帐户(要是你没有 CentOS 帐户的话,请在 ACO 网站 为自己建立帐户)。

Upload new attachment "pagure-centos-auth.png"

首次登入 https://git.centos.org ,你的 ACO 帐户设定将会被同步:

用法

get_sources.sh 脚本

有意运用 git.centos.org 及对它作出贡献的用户必须先复制及设定 centos-common 源码,它收录于:https://git.centos.org/centos-git-common

复制它的 git 指令是:

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

在此 git 源码库所收录的众多内容,包括有 get_sources.sh 这个脚本。当你在一个从 git 检出的 rpm 源码库下执行该脚本时,它会分析非文字来源档的中继档,下载相关档案,并建立 SOURCES/ 目录。你可考虑在 ~/bin 建立一个连结到此脚本(见以下范例)。

假设我们要存取 CentOS 的内核源码。

[user@host]$ git clone https://git.centos.org/rpms/kernel.git ; cd kernel
# 让我们存取 cneots7 内核
[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 clone -b c7 --single-branch https://git.centos.org/rpms/kernel.git

最终用户

要是你只想下载 git 源码库及/或源码,你可以(以匿名的形式)采用上述的 get_sources.sh 方法。

贡献者/SIG 管理员

你已经拥有一个 ACO 帐户,或者隶属于一个 SIG 吗? 那么你已经有权限读、写、修改位于 /rpms/ 名称空间下的每个 git 源码库。 SIG 拥有自动的存取权,它们预设为:

c* 后的 '*' 代表 c6、c7 或将面世的 c8

最后的 '*' 是你的 SIG 所选用的名称

例:要是你隶属于云端 SIG 小组,你自动拥有权限推送到以下分支:c7-sig-cloud-rdo-queens

非文字来源档(又名为 '''旁看缓存''' 内容)

我们只将文字来源档存放于 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 脚本的描述

推送源码

视乎你的群组会藉,你已经可以推送某些源码。 假设你是云端 SIG 的组员,你可以推送到 <git 源码库名称>/<分支名称>,例如 c7-sig-cloud-rdo-queens(此原理与你的会藉授权你读、写及修改的权限相同)

所有到 /sources/ 的上载都受制于你用于 CBS/Koji 的 x509/TLS 证书。

虽然有一个名为 centpkg 的新工具将会在将来被开发及应用,你已经可以采用名为 lookaside_upload,建基于 curl 的工具。 你可以在上述的 centos-git-common git 源码库找到此工具。

./lookaside_upload 

You need to call the script like this : ./lookaside_upload -arguments

        -f : filename/source to upload (required, default:none)
        -n : package name for that source (requred, default:none, example "httpd")
        -b : "branch" where to upload to (required, default:none, example "c7-sig-core")
        -h : display this help

来自 git.centos.org 的通知

通讯中介(MQTT)

所有在 git.centos.org 的(公开)git 源码库内的活动都会独发 mqtt 讯息(通讯内容)被发送到 mqtt.git.centos.org 上专属的 MQTT 中介。

你如何能订阅该 MQTT 中介呢(要是你想将某些流程自动化)? 唯一的要求就是你信任我们的 ACO(https://accounts.centos.org),并提供你那来自 ACO 的 TLS 证书。 所有步骤都是自动通过 centos-cert 完成的(来自 centos-packager,见 https://wiki.centos.org/HowTos/CentosPackager)

之后,你便能选用你偏好的 MQTT 客端(mosquitto 套件提供的 mosquitto_sub,或 python 的 python-paho-mqtt 客端,等),然后指向 mqtt.git.centos.org:8883

使用 mosquitto_sub 的简单范例:

mosquitto_sub --cafile ~/.centos-server-ca.cert --cert ~/.centos.cert --key ~/.centos.cert -h mqtt.git.centos.org -p 8883 -t git.centos.org/# -v

讯息的内容是可供解读的 json,而题目是由 pagure 推送 mqtt 通讯时自动建立的。

电邮

现时不可能从 *所有* 源码库接受电邮通知,因此你无法接受 git 推送的电邮通知。 要是你仍有此意欲,请考虑采用 MQTT 中介的方法,又或者要是有足够人作出要求,我们亦会建立一个桥接器发信到 https://lists.centos.org 上专属的邮件列表(现时未有作讨论或决定 —— 这只是一个主意)

Translation of revision 8

zh/Sources (last edited 2019-04-11 22:39:46 by TimothyLee)