跳转到内容

cnb-rs pr checkout

cnb-rs pr checkout <NUMBER> [-b <NAME>] [-f]

切到指定 Pull Request 的源分支。借鉴 gh pr checkout 的工作流:拉一次 get_pull 拿 head 信息,然后用本地 git 完成 fetch + checkout。

本命令不调任何 CNB 写 API,纯本地 git 操作;唯一的 API 调用是 get_pull 拿 head/base 元数据。

选项

  • <NUMBER>:PR 编号(必填)
  • -b, --branch <NAME>:本地分支名(默认用 head 分支名)
  • -f, --force:强制覆盖本地同名分支(使用 git checkout -B 而不是 -b

继承的全局选项:

  • --repo <REPO>:指定仓库路径(格式:group/repo
  • --domain <DOMAIN>:指定目标域名(默认:cnb.cool

工作流(同仓 PR)

  1. ${API}/repos/{repo}/-/pulls/{n} 拿 head / base
  2. 判断 head.repo.path == base.repo.path 是否同仓
  3. 同仓时执行:
    bash
    git fetch origin +refs/heads/<head>:refs/remotes/origin/<head> --no-tags
    git checkout -b <local> --track origin/<head>     # 默认
    git checkout -B <local> --track origin/<head>     # 带 --force

输出约定

  • stderr
    • ⚙ git fetch origin ... / ⚙ git checkout ... 显示底层 git 命令(便于排错)
    • 成功 ✓ 已切换到 PR #N 的源分支:<local>
  • stdout:无(checkout 不输出 URL,git 命令完成即可)
  • 退出码:成功 → 0;git 失败 → 1(含 git stderr 信息)

示例

bash
# 基本:切到 PR #42 的 head 分支
$ cnb-rs pr checkout 42
 git fetch origin +refs/heads/feature/login:refs/remotes/origin/feature/login --no-tags
 git checkout -b feature/login --track origin/feature/login
 已切换到 PR #42 的源分支:feature/login

# 用本地不同的分支名
$ cnb-rs pr checkout 42 -b review-login

# 本地已有同名分支,强制覆盖
$ cnb-rs pr checkout 42 -f

# PR 的远端分支已删(如合并后清理)→ git fetch 报错
$ cnb-rs pr checkout 271
错误: git fetch origin ... 失败  # 含 git fatal 信息

Known limitations / 跨仓 PR 暂不支持

  • 跨仓 PR(fork → 上游)第一版报错且不尝试自动 checkout。CNB 是否支持 GitHub 风格的 refs/pull/<N>/head refspec 暂未验证,盲目尝试可能失败且语义不明
  • 跨仓 PR 报错消息会给出手动迁移路径:
    请先 `git remote add <name> <fork_url>` 然后 `git fetch <name> <head_ref> && git checkout <head_ref>`
  • 不会自动 git pull:checkout 后用户可能想做本地改动 + push,本命令保持 git checkout -B + --track 的最简语义;要拿最新代码再跑 git pull 即可
  • 不像 gh pr checkout 那样支持 --detach / --recurse-submodules:第一版优先做核心场景

API 调用

步骤API / 命令说明
1. 拿 head/base${API}/repos/{repo}/-/pulls/{n} GET唯一 API 调用
2. fetchgit fetch origin +refs/heads/<head>:refs/remotes/origin/<head> --no-tags本地 git
3. checkoutgit checkout -b/-B <local> --track origin/<head>本地 git

另请参阅

Released under the MIT License.