面向 GitHub PR patch 流的 Rust CLI

把一个 Pull Request 拆成按 commit 排列的 patch 文件。

Patchsplit 会下载 GitHub Pull Request 的 .patch 文件,并为每个 commit 写出一个可移植 patch,适合 review、归档、重放或交接。

$ patchsplit openai codex 42 -o pr-42-patches
downloaded https://github.com/openai/codex/pull/42.patch
wrote 2 patch file(s)
pr-42-patches/0001-add-parser.patch
pr-42-patches/0002-wire-cli.patch
1 个 PR输入
N 个 patch输出
curl运行时依赖

Patchsplit

为 patch 级 review 工作流而写

它把流程保持得很明确:拉取 Pull Request patch,按 commit 边界拆分,并写出可预测且不会意外覆盖的文件。

01

两种输入方式

可以传 owner/repo 加 PR 编号,也可以把 owner、repo、PR 编号作为三个参数传入。

02

可预测文件名

每个文件使用四位序号加清理后的 commit subject,例如 0001-add-parser.patch。

03

默认拒绝覆盖

已存在的输出文件默认会被保护。只有明确传入 --force 时才会替换。

04

轻量 Rust 二进制

当前实现不引入第三方 Rust crate,并通过系统 curl 命令完成 HTTPS 下载。

Flow

从 PR 到 patch 集

01

指向 Pull Request

Patchsplit 根据仓库和 PR 编号拼出 GitHub .patch URL。

02

下载 patch 流

curl 会跟随跳转、在 HTTP 错误时失败,并带上 patchsplit 版本作为 user agent。

03

按 commit 拆分

mail patch 中的 From 标记定义 commit 边界;原始单 patch 会保留为一个文件。

04

写出可移植文件

默认输出到 patches/,也可以通过 --out 指定目录。

CLI

用法

两种命令形式都可用,再根据需要选择输出目录和覆盖行为。

仓库简写

patchsplit <owner/repo> <pr-number> [--out <dir>] [--force]
patchsplit rust-lang/rust 12345

拆开 owner 和 repo

patchsplit <owner> <repo> <pr-number> [--out <dir>] [--force]
patchsplit openai codex 42 -o pr-42-patches

参数

-o, --out <dir>
指定拆分后 patch 文件的输出目录,默认是 patches/。
-f, --force
允许覆盖已存在的 patch 文件。
-h, --help
显示帮助。
-V, --version
显示版本。

Packages

从 release 包安装

推送 v* tag 后会为 Linux、macOS、Windows 生成发布包。

Linux

tar -xzf patchsplit-linux-x86_64.tar.gz
chmod +x patchsplit
sudo install -m 755 patchsplit /usr/local/bin/patchsplit
patchsplit --version

macOS

tar -xzf patchsplit-macos-x86_64.tar.gz
chmod +x patchsplit
sudo install -m 755 patchsplit /usr/local/bin/patchsplit
patchsplit --version
xattr -d com.apple.quarantine /usr/local/bin/patchsplit

Windows

Expand-Archive .\patchsplit-windows-x86_64.zip -DestinationPath .\patchsplit
.\patchsplit\patchsplit.exe --version

Automation

发版流程

推送 v* tag 会触发 GitHub Actions。workflow 会构建 Linux、macOS、Windows 归档文件,并创建一个待检查的 GitHub draft release。

git tag v0.1.0
git push origin v0.1.0

让 Pull Request patch 小到可以逐个检查。

打开项目仓库