主要观点:过去几周为 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 支持等。
重要细节:
- 示例中
A
是feature
和main
的合并基,git diff feature main
会产生包含X
和Y
及回退B
和C
的混淆补丁。 - 隐藏跟踪引用如
+refs/heads/main:refs/hidden/feature-1/main
,可用于比较本地分支与远程分支。 - 拉取请求作为atproto 记录存储并随补丁变化更新。
- 轮次审查的优势包括提交不可变、评论与提交关联、作者可选择重新提交时间、可“interdiff”观察提交间变化等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。