拉取请求的生命周期

主要观点:过去几周为 Tangled 构建了拉取请求系统,今日展示其工作原理。用户有三种贡献仓库的方式,核心是补丁,包括从分支创建 PR 时的补丁生成、跨 fork 的引用比较等。Tangled 使用基于轮次的审查格式,轮次比标准分支方法更优。还分享了拉取请求的未来计划,如支持format-patch、Gerrit 风格的refs/for/main、Change ID 支持等。

关键信息:

  • 三种贡献方式:在 Web UI 粘贴补丁、比较两个本地分支(仅适用于仓库协作者)、跨 fork 比较。
  • 补丁生成:创建 PR 时通过计算分支与目标分支的差异生成“补丁”,要避免包含目标分支的回退更改需确定合并基。
  • 跨 fork 的引用比较:将远程引用“本地化”,通过建立 refspec 跟踪远程分支生成差异,每个 PR 有自己的隐藏引用并随提交更新。
  • 基于轮次的审查格式:初始提交为“轮 0”,接受审查后可重新提交开始“轮 1”,轮次有诸多优势。
  • 未来计划:支持format-patch、Gerrit 风格的refs/for/main、Change ID 支持等。

重要细节:

  • 示例中Afeaturemain的合并基,git diff feature main会产生包含XY及回退BC的混淆补丁。
  • 隐藏跟踪引用如+refs/heads/main:refs/hidden/feature-1/main,可用于比较本地分支与远程分支。
  • 拉取请求作为atproto 记录存储并随补丁变化更新。
  • 轮次审查的优势包括提交不可变、评论与提交关联、作者可选择重新提交时间、可“interdiff”观察提交间变化等。
阅读 26
0 条评论