研发协作
把 GitHub Project 草稿项批量转换为真实…
将 GitHub Project 中的 DraftIssue 批量转换为真实 Issue,继承 Status/Priority/Size 等字段,并可作为 sub-issue 挂到父 Issue 下。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
把 GitHub Project 草稿项通用
解决思路
- 用 `gh project item-list <number> --owner <owner> --format json --limit 999` 获取项目条目,并从 JSON 输出中筛选出类型为 `DraftIssue` 的条目。
- 向用户展示草稿项列表并确认转换范围:全部转换,或仅选择特定条目。
- 与用户确认父 Issue 的处理方式:指定已有父 Issue 编号、新建父 Issue,或不设父 Issue(仅创建独立 Issue)。
- 新建父 Issue 时执行 `gh issue create --title "feat: 项目名" --body "$(cat <<'EOF' ... EOF)"`,正文包含概要与子任务说明(子任务会作为 sub-issues 自动追加)。
- 转换前先用 `gh project item-list <number> --owner <owner> --format json --limit 999` 获取并记录每个草稿项的 Status、Priority、Size 等字段值。
- 对每个草稿项执行:1) `gh issue create --title "<草稿标题>" --body "<草稿正文>" --repo <owner>/<repo>` 创建 Issue;2) `gh project item-add <number> --owner <owner> --url <issue-url> --format json` 把新 Issue 加入项目;3) `gh project item-edit --id <new-item-id> --field-id <field-id> --project-id <project-id> --single-select-option-id <option-id>` 把字段值复制到新条目;4) `gh project item-delete <number> --owner <owner> --id <draft-item-id>` 删除原草稿项。
- Issue 标题推荐使用 Conventional Commits 格式:`feat:`、`fix:`、`chore:` 等。
- 若指定了父 Issue,用 `gh api --method POST repos/{owner}/{repo}/issues/{parent_number}/sub_issues -f sub_issue_id={child_node_id}` 把每个子 Issue 挂为 sub-issue;其中 `sub_issue_id` 需要 Issue 的节点 ID,可用 `gh issue view <number> --json id -q '.id'` 获取。
- 用表格报告结果,列出创建的 Issue 列表(#、Issue、标题、Priority、Size、Sub-issue 等列)。
- 完成后验证:执行 `gh issue list --state open --limit 20` 和 `gh project item-list <number> --owner <owner> --format json --limit 999`,确认转换前的草稿已消失、真实 Issue 已加入项目;父 Issue 的 sub-issues 用 `gh api repos/{owner}/{repo}/issues/{parent_number}/sub_issues` 确认。
- 在 sandbox 环境中,对需要网络访问的 GitHub 操作命令逐条禁用 sandbox 后执行;无法解除网络限制的环境不能运行。
- 如需要标签、负责人、里程碑,向用户确认后再设置;大量草稿转换时注意 GitHub API 速率限制。
适用边界 · 注意事项
- 目标 GitHub Project 中不存在草稿项(DraftIssue)时。
- 未安装 `gh` CLI 或未完成认证(缺少 `project` scope)时。
- 处于无法解除网络遮断的 sandbox 环境时。