使用git进行开发:开发者仓库
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 ...
进行准备,如下文 “上传新项目” 章节所述请求从开发者仓库拉取到官方仓库
在请求将开发者仓库合并到官方仓库之前,请确保
- 所有修改过的软件包均已构建
- 提交历史看起来不错。您可以使用 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 进行验证)。
这也意味着只有 集成管理器 应该从开发者仓库拉取。所有其他开发者都应该从经过批准的仓库拉取。(理论上,多个开发者可以处理一个更大的子项目,但其中一位开发者应在 独裁者和副官工作流 中担任副官。)