使用git进行开发:开发者仓库

来自 Alpine Linux


Alpine 开发者的部分 git 仓库托管在 git.alpinelinux.org。没有官方 aports 仓库推送权限的开发者可以拥有一个开发者 aports 仓库,用作暂存区。拥有推送权限的开发者,集成管理器,可以审查并从中拉取,或者在更改需要更多修复时选择拒绝。

当有许多更改(超过 3 个)且几乎不需要审查时,应使用 git 仓库。如果需要评论或有疑问,则最好使用 git send-email。对于单个提交,使用 git send-email 也可能更好。

Git 推送 (分布式工作流)

当使用 分布式工作流 时,您将从公共仓库 '拉取','推送' 到另一个公开可访问的仓库 (您拥有写入权限),主要开发者或 集成管理器,他们拥有公共仓库的写入权限,将从您的公共访问仓库 '拉取' 您的更改到经过批准的官方公共仓库。

为了方便您的工作,您可以配置 'git push' 将您的工作推送到您的公共开发者仓库('git pull' 仍然会从您克隆的经过批准/官方仓库拉取)。

cd /your/private/repo/where/you/work/reponame git config remote.origin.pushurl "ssh://user@dev.alpinelinux.org/home/user/cgit/reponame.git"

现在 'git pull' 拉取官方、经过批准的仓库,而 'git push' 推送到您的公共开发者仓库。

注意: 您要推送到的路径应首先使用

git clone --bare ...

进行准备,如下文 “上传新项目” 章节所述

请求从开发者仓库拉取到官方仓库

在请求将开发者仓库合并到官方仓库之前,请确保

  1. 所有修改过的软件包均已构建
  2. 提交历史看起来不错。您可以使用 cgit 界面 来查看。我们的目标是,为了将来出现问题时易于回滚单个提交,应避免使用单个提交更改多个软件包。

在请求拉取之前,请将您的公共仓库与官方仓库进行变基。这可以通过以下方式完成:

git pull --rebase git push

如果官方仓库中存在与您的工作冲突的更改,则您必须解决这些冲突。并且可能需要重做或删除您的一些提交。

您可以直接在 IRC #alpine-devel 上询问,或发送电子邮件至 alpine-devel 邮件列表。请包含易于复制粘贴的 git URL(例如 git://git.alpinelinux.org/user/aports.git),并请说明为什么需要合并。除非拉取是快进,否则此说明将复制并粘贴到合并提交中。

IRC 上的请求示例

please git pull git://git.alpinelinux.org/ncopa/aports
It includes a new python application pyfoo with all its dependencies.

电子邮件示例

Subject: please git pull git://git.alpinelinux.org/ncopa/aports

The libfoo was upgraded to 2.0. This upgrade breaks ABI so all packages linking
to libfoo was rebuilt. The rebuilt packages was:
- libbar
- bazapp
- bar-utils

处理拉取拒绝

如果拉取由于某种原因被拒绝,或者您需要更改内容,则可以进行交互式变基。

git rebase --interactive

这将使您能够交互式地浏览所有提交,修复提交和/或提交消息(又名 --ammend),合并提交等。可能是 集成管理器 会看到您尝试修复的内容,然后立即修复它。在这种情况下,您可能需要删除自己的提交。这也可以使用 git rebase 完成。

完成所需的更改后,您再次推送到您的公共开发者仓库(并且像往常一样,您在推送之前 git pull --rebase),但由于历史记录因变基而更改,git 可能会在推送时给您一个错误消息。只要没有人克隆/拉取您的仓库,使用 --force 选项应该是安全的。

git push --force

请注意,这将覆盖您的公共仓库上的更改和历史记录,因此请确保您的本地工作克隆具有所有应有的提交。(使用 git log 进行验证)。

这也意味着只有 集成管理器 应该从开发者仓库拉取。所有其他开发者都应该从经过批准的仓库拉取。(理论上,多个开发者可以处理一个更大的子项目,但其中一位开发者应在 独裁者和副官工作流 中担任副官。)