mcpField
G
glab-quick-actions

glab-quick-actions

github.com/vince-winkintel开发49101 次安装1 天前更新
代码仓库

关于 glab-quick-actions

通过 `glab` 在 GitLab issue 和合并请求中执行 quick actions 的命令行技能,可在一条评论中批量变更状态,并支持原生命令行标志未涵盖的操作。

主要功能

  1. 01在一条评论中批量执行操作
  2. 02管理 issue 指派、标签和里程碑
  3. 03更改合并请求审核及合并状态
  4. 04记录工时并设置预估
  5. 05通过 Shell 脚本自动分诊

适用场景

  1. 01一次为某个 issue 应用多项分诊变更
  2. 02将合并请求标记为可审核并请求审核
  3. 03批量执行批准和合并操作
  4. 04编写脚本更新多个 issue

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vince-winkintel/gitlab-cli-skills --skill glab-quick-actions

安装后在 Claude Code 中输入/glab-quick-actions确认已加载。

详细介绍

glab 快捷操作

通过 glab CLI 使用 GitLab 快捷操作(斜杠命令),在单个 API 调用中批量更改多项状态。

快速开始

# Post a single quick action on an issue
glab issue note 123 -m "/assign @alice"

# Batch multiple quick actions in one comment
glab issue note 123 -m "/assign @alice
/label ~bug ~priority::high
/milestone %\"Sprint 5\""

# Post quick actions on a merge request
glab mr note 456 -m "/assign_reviewer @bob
/label ~needs-review
/estimate 2h"

核心概念:通过 CLI 批量处理

虽然 glab 提供了许多单项操作的原生命令(glab issue update、glab mr update 等),但通过 glab issue note 或 glab mr note 发布快捷操作,可以在单个 API 调用中原子性地批量更改多项状态。

# Native commands — 3 separate API calls
glab issue update 123 --assignee @alice
glab issue update 123 --label bug,priority::high
glab issue update 123 --milestone "Sprint 5"

# Quick actions — 1 API call, same result
glab issue note 123 -m "/assign @alice
/label ~bug ~priority::high
/milestone %\"Sprint 5\""

适合批量处理的场景:

  • 对单个 issue/MR 应用 3 项或更多更改
  • 为多个事项编写分流工作流脚本
  • 触发 glab update 标志未提供的操作(例如,/spend、/epic、/promote_to)

语法规则

规则详情
前缀每个快捷操作都以 / 开头
大小写不区分大小写(/Assign = /assign)
位置每行一条命令;可出现在评论/描述的任意位置
参数在命令名称后用空格分隔
标签添加 ~ 前缀(例如,~bug、~"priority::high")
里程碑添加 % 前缀(例如,%"Sprint 5")
用户添加 @ 前缀(例如,@alice、@me)
MR/Issue 引用同一项目内添加 # 前缀,跨项目使用 group/project#IID
Epic添加 & 前缀(例如,&42)
引号多词值需加引号:~"priority::high"、%"Sprint 5"
忽略文本非快捷操作行将作为普通评论文本发布

Issue 快捷操作

分配
命令参数描述
/assign@user [@user2 ...]分配一个或多个用户
/unassign@user [@user2 ...] 或不填移除指定受指派人或清空所有人
/reassign@user [@user2 ...]将所有受指派人替换为指定用户
glab issue note 123 -m "/assign @alice @bob"
glab issue note 123 -m "/reassign @charlie"
glab issue note 123 -m "/unassign"
标签
命令参数描述
/label~label1 ~label2 ...添加标签
/unlabel~label1 ... 或不填移除指定标签或清空所有标签
/relabel~label1 ...将所有标签替换为指定标签
glab issue note 123 -m "/label ~bug ~\"priority::high\""
glab issue note 123 -m "/relabel ~\"type::feature\""
glab issue note 123 -m "/unlabel ~needs-triage"
里程碑与排期
命令参数描述
/milestone%milestone设置里程碑
/remove_milestone—移除里程碑
/due<date>设置截止日期(YYYY-MM-DD、tomorrow、next week)
/remove_due_date—移除截止日期
glab issue note 123 -m "/milestone %\"Sprint 5\""
glab issue note 123 -m "/due 2024-03-31"
glab issue note 123 -m "/due next week"
时间跟踪
命令参数描述
/estimate<time>设置预估时间(例如,1h30m、3d)
/remove_estimate—移除预估时间
/spend<time> [<date>]记录耗时(例如,2h;使用 -30m 扣减)
/remove_time_spent—移除所有已记录的耗时
glab issue note 123 -m "/estimate 4h"
glab issue note 123 -m "/spend 1h30m 2024-03-15"
glab issue note 123 -m "/spend -30m"
状态更改
命令参数描述
/close—关闭 issue
/reopen—重新打开已关闭的 issue
/confidential—将 issue 设为机密
/done—标记为已完成(用于待办事项)
/todo—添加到你的待办列表
glab issue note 123 -m "/close"
glab issue note 123 -m "/reopen"
关联关系
命令参数描述
/duplicate#issue标记为另一个 issue 的重复项
/relate#issue [#issue2 ...]添加相关 issue 链接
/blocks#issue [#issue2 ...]此 issue 阻塞其他 issue
/blocked_by#issue [#issue2 ...]此 issue 被其他 issue 阻塞
/unrelate#issue移除与另一个 issue 的关联
glab issue note 123 -m "/duplicate #456"
glab issue note 123 -m "/relate #789 #790"
glab issue note 123 -m "/blocks #800"
规划与层级
命令参数描述
/epic&epic or group&epic添加到史诗
/remove_epic—从史诗中移除
/iteration*iteration:"name"设置迭代/冲刺
/remove_iteration—移除迭代
/weight<number>设置议题权重
/clear_weight—清除议题权重
/health_statuson_track, needs_attention, at_risk设置健康状态
/clear_health_status—移除健康状态
/board_move~list-label将议题移至看板列表
glab issue note 123 -m "/epic &42"
glab issue note 123 -m "/iteration *iteration:\"Sprint 7\""
glab issue note 123 -m "/weight 3"
glab issue note 123 -m "/health_status on_track"
高级
命令参数描述
/copy_metadata#issue or !mr从其他项目复制标签和里程碑
/clone[path/to/project]将议题克隆到其他项目
/movepath/to/project将议题移至其他项目
/create_merge_request[branch-name]根据此议题创建 MR
/promote_toincident or epic将议题提升为其他类型
glab issue note 123 -m "/copy_metadata #456"
glab issue note 123 -m "/move group/other-project"
glab issue note 123 -m "/create_merge_request 123-my-feature"
glab issue note 123 -m "/promote_to incident"

MR 快捷操作

审批
命令参数描述
/approve—批准 MR
/unapprove—撤销你的批准
glab mr note 456 -m "/approve"
分配
命令参数描述
/assign@user [@user2 ...]将 MR 分配给一位或多位用户
/unassign@user ... or none移除受分配人
/reassign@user ...替换所有受分配人
/assign_reviewer@user [@user2 ...]添加审阅者
/unassign_reviewer@user ... or none移除审阅者
/reassign_reviewer@user ...替换所有审阅者
/request_review@user [@user2 ...]请求一位或多位用户进行审阅
glab mr note 456 -m "/assign_reviewer @alice @bob
/label ~needs-review"
标签与里程碑
命令参数描述
/label~label1 ...添加标签
/unlabel~label1 ... or none移除标签
/relabel~label1 ...替换所有标签
/milestone%milestone设置里程碑
/remove_milestone—移除里程碑
时间跟踪
命令参数描述
/estimate<time>设置时间预估
/remove_estimate—移除时间预估
/spend<time> [<date>]记录已花费时间
/remove_time_spent—移除所有已花费时间
合并控制
命令参数描述
/merge—在流水线成功后合并
/draft—将 MR 标记为草稿
/ready—将 MR 标记为可供审阅
/rebase—将源分支变基到目标分支
/squash—启用合并时压缩提交
/target_branch<branch>更改目标分支
glab mr note 456 -m "/approve
/merge"

glab mr note 456 -m "/draft"
glab mr note 456 -m "/ready
/assign_reviewer @lead"
状态与其他
命令参数描述
/close—关闭 MR
/reopen—重新打开已关闭的 MR
/copy_metadata#issue or !mr从其他项目复制标签和里程碑
/react:emoji:添加表情回应
/title<new title>更改 MR 标题
/todo—添加到你的待办列表
/done—将待办标记为已完成
/subscribe—订阅 MR 通知
/unsubscribe—取消订阅 MR 通知
/relate#issue [#issue2 ...]添加相关议题链接
/blocks#issue [#issue2 ...]此 MR 阻止相关议题
/blocked_by#issue [#issue2 ...]此 MR 被相关议题阻止

何时使用快速操作,何时使用原生 glab 命令

场景建议方式
更新单个字段glab issue update / glab mr update(显式指定标志)
一次进行 3 项或更多更改在一条评论中批量使用快速操作
update 标志中没有对应操作使用快速操作(例如 /spend、/epic、/promote_to、/rebase)
通过脚本对许多条目进行分类使用 glab issue note 快速操作循环处理
需要标志自动补全使用原生 glab update 命令
需要通过评论保留审计记录使用快速操作(会显示在活动动态中)
原子地批准并合并在同一条评论中先用 /approve,再用 /merge
决策指南
Do you need to update a single field?
├─ Yes → Use native glab command (e.g., glab issue update --label)
│
├─ No, multiple fields at once?
│   ├─ 2-3 fields supported by --flags → native glab update
│   └─ 3+ fields OR unsupported fields → quick actions batch
│
└─ Is the action not available in glab update?
    └─ Yes → Quick actions only (e.g., /spend, /epic, /promote_to, /rebase, /merge)

自动化示例

分类脚本:一次性添加标签、指派负责人并设置里程碑
#!/usr/bin/env bash
# triage-issues.sh — apply triage metadata to a list of issue IDs
# Usage: ./triage-issues.sh 123 456 789

ASSIGNEE="${ASSIGNEE:-@me}"
LABEL="${LABEL:-~needs-triage}"
MILESTONE="${MILESTONE:-%\"Sprint 5\"}"

for IID in "$@"; do
  glab issue note "$IID" -m "/assign $ASSIGNEE
/label $LABEL
/milestone $MILESTONE"
  echo "Triaged #$IID"
done
批量关闭过时议题
#!/usr/bin/env bash
# close-stale.sh — close all issues with label ~stale
glab issue list --label stale --state opened --output json \
  | jq -r '.[].iid' \
  | while read -r IID; do
      glab issue note "$IID" -m "/close
/unlabel ~stale"
      echo "Closed #$IID"
    done
将 MR 标记为可供审查并指派审查者
#!/usr/bin/env bash
# ready-for-review.sh — mark current branch MR ready and request review
MR_IID=$(glab mr list --source-branch "$(git branch --show-current)" --output json | jq -r '.[0].iid')

glab mr note "$MR_IID" -m "/ready
/assign_reviewer @team-lead
/label ~needs-review"
echo "MR !$MR_IID marked ready"
时间跟踪:通过 CLI 记录已花费的时间
#!/usr/bin/env bash
# log-time.sh — log time spent on an issue
# Usage: ./log-time.sh 123 2h30m "2024-03-15"
IID="$1"
TIME="$2"
DATE="${3:-}"

if [[ -n "$DATE" ]]; then
  glab issue note "$IID" -m "/spend $TIME $DATE"
else
  glab issue note "$IID" -m "/spend $TIME"
fi
echo "Logged $TIME on #$IID"
Sprint 轮换:将议题移至下一个里程碑
#!/usr/bin/env bash
# rotate-sprint.sh — move open issues from one milestone to the next
OLD_MILESTONE="Sprint 5"
NEW_MILESTONE="Sprint 6"

glab issue list --milestone "$OLD_MILESTONE" --state opened --output json \
  | jq -r '.[].iid' \
  | while read -r IID; do
      glab issue note "$IID" -m "/milestone %\"$NEW_MILESTONE\""
      echo "Moved #$IID to $NEW_MILESTONE"
    done
批准并将合并加入队列
# Approve an MR and queue it to merge when pipeline passes
glab mr note 456 -m "/approve
/merge"

说明与限制

  • 需要特定权限的快速操作(例如 /merge、/approve)会在你缺少相应角色时静默失败。
  • /merge 会将 MR 加入合并队列,待流水线成功后再合并;它不会立即强制合并。
  • 议题/MR 描述中的快速操作会在创建和编辑时处理。
  • 部分快速操作仅适用于特定 GitLab 版本层级(例如,/epic、/iteration、/weight、/health_status 需要 GitLab Premium 或 Ultimate)。
  • 作为评论发布的快速操作之后无法编辑;如有需要,请发布更正评论。
  • glab CLI 在发布前不会验证快速操作语法;请检查用户名或标签名是否有拼写错误。

相关子技能

  • glab-issue — 原生议题创建/更新/关闭命令
  • glab-mr — 原生 MR 创建/更新/批准/合并命令
  • glab-label — 使用 /label 前管理标签
  • glab-milestone — 使用 /milestone 前管理里程碑
  • glab-iteration — 使用 /iteration 前管理迭代

参考资料

评论

支持 Markdown