# ge
**Repository Path**: Jacean/ge
## Basic Information
- **Project Name**: ge
- **Description**: ge(gitee-cli)是一个用 Go 编写的 Gitee 命令行工具,对标 GitHub CLI (gh)
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2026-06-04
- **Last Updated**: 2026-06-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ge · Gitee CLI
**Gitee on the command line.**
[](https://pkg.go.dev/gitee.com/imjoey/ge/v5)
[](https://goreportcard.com/report/gitee.com/imjoey/ge/v5)
[](LICENSE)
`ge`(也叫 `gitee-cli`)是一个用 Go 编写的 [Gitee](https://gitee.com) 命令行工具。它将仓库、Issue、Pull Request、Release 等概念带到你的终端,让你在 `git` 旁边就能完成所有 Gitee 操作。同时为 AI Agent 提供完整的 SKILL.md,让 Agent 无需文档搜索即可直接操作 Gitee。
```bash
$ ge repo create --name my-project --private
$ ge issue create --repo my-project --title "Fix login bug"
$ ge pr list --repo my-project
$ ge release create v1.0.0 --repo my-project --title "First Release"
```
---
## 给 AI Agent:安装 ge
把以下整段原样发给你的 AI Agent(Claude Code / Codex / Hermes / OpenCode 等),它会自动完成全部安装、认证、并加载操作手册:
```
安装 ge(Gitee CLI):
# 1. 下载并安装预编译二进制(Linux amd64;其他平台见下方文件名表)
curl -sL https://gitee.com/imjoey/ge/releases/download/v5.10.0/ge_v5.10.0_linux_amd64.tar.gz -o /tmp/ge.tgz
tar xzf /tmp/ge.tgz -C /tmp
sudo mv /tmp/ge_v5.10.0_linux_amd64/ge /usr/local/bin/ge
ge --version # 应输出 ge version 5.10.0
# 2. 配置认证(在 https://gitee.com/profile/personal_access_tokens 生成 token)
export GITEE_TOKEN=
# 3. 加载操作手册(必读,覆盖全部命令、参数、Gitee 特有陷阱与端到端工作流)
# 入口:https://gitee.com/imjoey/ge/blob/main/skills/gitee-cli/SKILL.md
# 由此路由到 references/commands/*.md 与 references/workflows/*.md,按需加载
```
**其他平台**:把 URL 中的 `linux_amd64` 替换为下表对应组合,完整下载列表见 [Releases](https://gitee.com/imjoey/ge/releases)。
| OS | AMD64 | ARM64 |
|----|-------|-------|
| Linux | `linux_amd64` | `linux_arm64` |
| macOS | `darwin_amd64` | `darwin_arm64` |
| Windows | `windows_amd64` (.zip) | `windows_arm64` (.zip) |
> Token 在 [Gitee → 设置 → 私人令牌](https://gitee.com/profile/personal_access_tokens) 生成;按需勾选 scope(`issues` / `pulls` / `releases` 等)。401/403 时 `ge` 会自动诊断缺失的 scope 并打印恢复步骤。
---
## 为什么需要 ge?
GitHub 有 [`gh`](https://github.com/cli/cli),GitLab 有 [`glab`](https://gitlab.com/gitlab-org/cli),**Gitee 一直没有官方 CLI**。
`ge` 填补了这个空白。
- 🤖 **Agent 优先** — 内置 [SKILL.md](skills/gitee-cli/SKILL.md),Agent 装上即用,无需翻文档猜命令
- 🌐 **完整 API v5 覆盖** — 279 个 API 方法,覆盖 Gitee API v5 全部 264 个端点(100%+),18 个资源类型
- 🚀 **开箱即用** — 一个二进制文件,零依赖,macOS / Linux / Windows 全平台
- 🔌 **非交互模式** — 所有命令支持 `--yes` / 环境变量,适合 CI/CD 和 AI Agent 调用
- 🏗️ **架构对标 gh** — Factory 模式、IOStreams、httpmock,代码质量经得起考验
- 🎨 **彩色终端输出** — 自动检测 TTY,脚本模式和交互模式都有好体验
### Agent 协同,CLI 是关键基础设施
当多个 Agent 协作开发一个项目时——一个写代码、一个管 Issue、一个做 Code Review——它们需要一个**共同的操作界面**来协调 Gitee 上的工作。CLI 就是这个界面。
```
Agent A (代码) ──┐
│ ge issue create / pr create / pr merge
Agent B (Review) ──┼──▶ 统一的 Gitee 操作接口
│ 无需共享服务进程,各 Agent 独立调用
Agent C (CI/CD) ──┘
```
- **零协调成本** — 每个 Agent 只需 `ge` 二进制 + `GITEE_TOKEN`,无需启动额外的服务进程
- **框架无关** — Claude Code、Hermes、Codex、OpenCode……任何能执行命令的 Agent 都能用
- **可组合** — 命令可以管道串联、写入脚本、嵌入 CI/CD,MCP 做不到这些
- **状态透明** — 命令的输入输出都是可读的文本,Agent 之间可以互相理解和审计
### CLI vs MCP Server
Gitee 已有官方 MCP Server([`oschina/mcp-gitee`](https://gitee.com/oschina/mcp-gitee)),但它和 CLI 解决的是不同层面的问题。以下是对比:
| | `ge` CLI | MCP Server |
|---|---|---|
| **运行方式** | 单个二进制,即装即用 | 需要启动并维护一个服务进程 |
| **Agent 兼容性** | 任何能执行 shell 命令的 Agent | 仅支持 MCP 协议的客户端(Cursor、Claude Desktop 等) |
| **API 覆盖** | 279 个方法,264 端点全覆盖 | ~29 个工具,缺少 auth、branch protection、webhook、org、milestone、label、tag、commit 等 |
| **CI/CD** | 原生支持,环境变量认证 | 不适用,MCP 是交互式协议 |
| **脚本组合** | 可管道、可嵌入 shell 脚本 | 只能通过 MCP 协议逐个调用 |
| **多 Agent 协同** | 各 Agent 独立调用,无需共享进程 | 需要 Agent 客户端各自连接 MCP Server |
| **离线/弱网** | 命令可预编排、重试、记录 | 依赖实时协议连接 |
**两者不是替代关系,而是互补**。GitHub 同时维护 [`gh` CLI](https://github.com/cli/cli) 和 [`github-mcp-server`](https://github.com/github/github-mcp-server)——`ge` 和 Gitee MCP Server 也是同样道理。对于 Agent 自动化、CI/CD、脚本编排、多 Agent 协同等场景,CLI 是不可替代的基础设施。
## 快速开始
### 1. 认证
```bash
# 用 Token 登录(推荐)
export GITEE_TOKEN=your_personal_access_token
# 或者保存到配置文件
ge auth login --token your_personal_access_token
# 检查认证状态
ge auth status
```
> 💡 在 [Gitee → 设置 → 私人令牌](https://gitee.com/profile/personal_access_tokens) 生成 Token
### 2. 试试看
```bash
# 查看你的信息
ge user info
# 列出你的仓库
ge repo list
# 创建一个新仓库
ge repo create --name hello-world --private
# 搜索仓库
ge search repos "golang cli"
```
## 核心功能
ge 覆盖 Gitee API v5 全部 264 个端点(279 个方法),主要功能领域:
- **仓库**:`repo` — 创建、删除、fork、文件读写、协作者、部署公钥、评论、流量统计
- **Issue**:`issue` — 完整生命周期(创建/编辑/关闭/重开)+ 评论 + 标签 + 操作日志
- **Pull Request**:`pr` — 完整流程(创建/审核/测试/合并)+ diff + 评论 + 人员指派
- **分支与标签**:`branch`、`tag` — 列表、创建、保护设置
- **Release**:`release` — 创建/查看/删除 + 附件上传下载
- **用户与组织**:`user`、`org` — 个人信息、SSH key、关注、成员管理
- **通知与消息**:`notification` — 站内通知 + 私信
- **搜索**:`search` — 仓库、Issue、用户
- **企业版**:`enterprise` — 企业信息、成员、周报、Issue/PR
- **CI/CD**:`check` — Check Run 管理
- **Webhook**:`webhook` — 创建/删除/测试
- **工具**:`config`、`alias`、`completion`、`version`
每个命令都支持 `--help` 查看详细用法。
- **命令索引**:[docs/commands.md](docs/commands.md) — 所有命令组的速览
- **详细参考**:[skills/gitee-cli/references/commands/](skills/gitee-cli/references/commands/) — 每组的完整 flag 表与示例
- **任务流程**:[skills/gitee-cli/references/workflows/](skills/gitee-cli/references/workflows/) — PR 三步合并、Issue 生命周期、发版等端到端场景
- **故障排查**:[skills/gitee-cli/references/workflows/troubleshooting.md](skills/gitee-cli/references/workflows/troubleshooting.md)
- **Agent Skill 入口**:[skills/gitee-cli/SKILL.md](skills/gitee-cli/SKILL.md) — 所有 Agent 框架通用的 ge 操作指南
## 使用示例
### 仓库操作
```bash
# 列出仓库
ge repo list
# 创建仓库(非交互,适合 CI/Agent)
ge repo create --name my-project --description "My project" --private
# 删除仓库(需要确认,或用 --yes 跳过)
ge repo delete owner/my-project --yes
# Fork 仓库
ge repo fork owner/some-repo
# 管理协作者
ge repo collaborator-list --repo my-project
ge repo collaborator-add username --repo my-project --permission push
```
### Issue 工作流
```bash
# 列出 Issue
ge issue list --repo my-project
ge issue list --repo my-project --state closed
# 创建 Issue
ge issue create --repo my-project --title "Bug: crash on startup" --body "Steps to reproduce..."
# 关闭 Issue
ge issue close my-project 123
```
### Pull Request 工作流
```bash
# 列出 PR
ge pr list --repo my-project
ge pr list --repo my-project --state merged
# 创建 PR
ge pr create --repo my-project --title "feat: add login page" --source feature/login --target master
# 合并 PR
ge pr merge my-project 42
```
### Release 发布
```bash
# 创建 Release
ge release create v1.0.0 --repo my-project --title "v1.0.0 - First Release" --note "## What's New\n- Feature A\n- Bug fix B"
# 查看 Release
ge release view v1.0.0 --repo my-project
# 删除 Release
ge release delete 1 --repo my-project
```
## Agent 集成
`ge` 从第一天起就是为 Agent 设计的——不是一个二进制加上"也可以给 Agent 用"的文档,而是内置 [SKILL.md](skills/gitee-cli/SKILL.md),Agent 读取后即可知道:
- 如何安装和认证 `ge`(见本文档顶部)
- 所有可用命令及其参数
- Gitee 与 GitHub 的差异(如三步合并流程)
- 各操作的完整示例
`skills/gitee-cli/` 是**框架中立**的标准 SKILL.md 格式(Anthropic Skills 规范,已被多家框架采纳)。Agent 只需读 `SKILL.md` 入口即可,无需关心它托管在哪种 agent 框架里。
### 多 Agent 协同实战
一个真实的多 Agent 协作场景——三个 Agent 通过 `ge` CLI 协调 Gitee 上的开发工作流:
```
┌─────────────┐ ge issue create ┌──────────────┐
│ Hermes │──────────────────────▶ │ Gitee │
│ (调度) │ ge pr review/test │ │
│ │ ge pr merge │ Issue #42 │
└──────┬──────┘ ge issue close │ PR #42 │
│ │ Release │
│ 派活 └──────▲───────┘
▼ │
┌─────────────┐ git push │
│ Claude Code │──────────────────────┐ │
│ (编码) │ ge pr create ├───────┘
└─────────────┘ │
│
┌─────────────┐ ge release create │
│ Codex │──────────────────────┘
│ (部署) │ ge tag create
└─────────────┘
```
```
# Hermes(调度 Agent)创建 Issue 派活
ge issue create --repo owner/ge --title "feat: add webhook support" --body "实现 webhook CRUD"
# Claude Code(编码 Agent)完成开发后创建 PR
git push origin feat/webhook
ge pr create --repo owner/ge --title "feat: add webhook support" --source feat/webhook
# Hermes 审核 PR(Gitee 三步合并)
ge pr review 42 --repo owner/ge
ge pr test 42 --repo owner/ge
ge pr merge owner/ge 42
# Codex(部署 Agent)打 Tag、发 Release
ge tag create v1.1.0 --repo owner/ge
ge release create v1.1.0 --repo owner/ge --title "Webhook Support"
# Hermes 收工
ge issue close owner/ge IJXXXX
```
**核心价值**:三个 Agent 来自不同的框架(Hermes、Claude Code、Codex),但它们都用同一个 `ge` CLI 操作 Gitee。不需要共享进程、不需要统一协议——`ge` 就是它们之间的**通用语言**。
Gitee 的 PR 合并必须走三步(review → test → merge),Agent 读取 SKILL.md 后会自动遵循这个流程,不会遗漏。
### CI/CD 场景
```bash
# 纯环境变量认证,无需配置文件
export GITEE_TOKEN=${{ secrets.GITEE_TOKEN }}
# 非交互操作
ge repo create --name auto-project --private
ge issue create --repo auto-project --title "Automated issue" --body "Created by CI"
ge pr create --repo auto-project --title "Auto PR" --source fix-branch
ge repo delete owner/auto-project --yes
```
## Shell 补全
```bash
# Bash
ge completion -s bash > /etc/bash_completion.d/ge
echo 'source /etc/bash_completion.d/ge' >> ~/.bashrc
# Zsh
ge completion -s zsh > "${fpath[1]}/_ge"
# Fish
ge completion -s fish > ~/.config/fish/completions/ge.fish
```
## 配置
### Token 优先级
`ge` 按以下顺序查找 Token:
1. `GITEE_TOKEN` 环境变量(最高优先级)
2. `GE_TOKEN` 环境变量
3. 配置文件 `~/.config/ge/config.yml` 中的 `gitee_token`
4. 遗留配置 `~/.gitee.yaml`
### 配置文件
默认位置:`~/.config/ge/config.yml`
```yaml
gitee_token: your_token # 不推荐,优先用环境变量
owner: your_username # 默认 owner
git_protocol: https # https 或 ssh
editor: vim # 文本编辑器
```
### 环境变量
| 变量 | 说明 |
|------|------|
| `GITEE_TOKEN` | Gitee 个人访问令牌(最高优先级) |
| `GE_TOKEN` | `GITEE_TOKEN` 的别名 |
| `GE_CONFIG_PATH` | 自定义配置文件路径 |
## 项目架构
`ge` 的架构参照 GitHub CLI ([`gh`](https://github.com/cli/cli)) 的设计模式:
```
ge/
├── main.go # 入口
├── internal/
│ ├── cmdutil/ # Factory、错误类型、工具函数
│ ├── config/ # 配置管理(XDG 路径、Token 优先级)
│ ├── build/ # 版本信息(ldflags + ReadBuildInfo fallback)
│ └── commands/ # 命令实现(每个功能一个目录)
│ ├── auth/ # 认证命令
│ ├── repo/ # 仓库命令
│ ├── issue/ # Issue 命令
│ ├── pr/ # PR 命令
│ ├── branch/ # 分支命令
│ ├── release/ # Release 命令
│ ├── milestone/ # 里程碑命令
│ ├── label/ # 标签命令
│ ├── webhook/ # Webhook 命令
│ ├── commit/ # 提交命令
│ ├── tag/ # 标签命令
│ ├── search/ # 搜索命令
│ ├── org/ # 组织命令
│ ├── user/ # 用户命令
│ ├── notification/ # 通知命令
│ ├── watch/ # 仓库订阅命令
│ ├── enterprise/ # 企业管理命令
│ ├── check/ # Check Run 命令
│ ├── activity/ # 活动事件命令
│ ├── git/ # Git 数据命令
│ ├── config/ # 配置命令
│ ├── completion/ # Shell 补全
│ └── version/ # 版本命令
├── pkg/
│ ├── gitee/ # Gitee API v5 客户端(Facade 层)
│ ├── giteeapi/ # go-swagger 生成的 API 客户端
│ ├── iostreams/ # I/O 流抽象(TTY 检测、颜色)
│ └── httpmock/ # HTTP Mock 测试框架
├── skills/gitee-cli/ # Agent Skill(框架中立,所有 agent 框架通用)
│ ├── SKILL.md # Agent 入口(命令索引 + 5 条核心陷阱)
│ └── references/ # commands/ + workflows/ 详细参考
├── docs/ # 人类向文档(commands.md / install_*.md / faq.md)
├── tests/ # 集成测试和 E2E 测试
├── .goreleaser.yml # 多平台发布配置
└── Makefile # 构建任务
```
**核心设计模式**(与 gh 一致):
- **Factory** — `cmdutil.Factory` 注入 IOStreams、Config、HttpClient
- **Options** — 每个命令有独立的 Options 结构体
- **Test Injection** — `runF` 参数支持测试注入
- **IOStreams** — TTY 检测、颜色支持、测试模式
- **httpmock** — 可验证的 HTTP Mock,确保测试覆盖
## 测试状态
| 指标 | 值 |
|------|-----|
| 测试文件 | 247 个 |
| 测试函数 | 2,134 个 |
| 总覆盖率 | 57.6% |
| golangci-lint | 0 issues ✅ |
| API 覆盖率 | 279/264 端点 (100%+,含超额方法) |
### 各模块覆盖率
| 模块 | 覆盖率 | 模块 | 覆盖率 |
|------|--------|------|--------|
| user | 99.9% | label | 99.6% |
| tag | 99.3% | search | 98.9% |
| commit | 97.7% | notification | 92.5% |
| pr | 82.5% | issue | 76.5% |
| branch | 74.3% | repo | 65.9% |
| release | 62.8% | pkg/gitee | 40.5% |
## Gitee API 与 GitHub 的差异
`ge` 覆盖了 Gitee API v5 全部端点,但 Gitee 平台本身和 GitHub 有一些设计差异,使用时需要注意:
### PR 合并流程
Gitee 的 PR 合并是**三步审批**(review → test → merge),不是 GitHub 的一步完成。`ge pr review` 和 `ge pr test` 是两个独立的审批环节,缺一不可。详见 [SKILL.md](SKILL.md)。
### Issue 读写路径
Issue 的读操作和写操作使用不同的 URL 路径:读取走 `/repos/{owner}/{repo}/issues`,创建/更新走 `/repos/{owner}/issues`(repo 作为 body 参数)。`ge` 已统一处理,用户无需关心。
### 请求格式
Gitee Swagger 文档标注参数类型为 `formData`,但实际也接受 JSON body。`ge` 统一使用 JSON 格式。
### Issue 编号格式
Gitee 的 Issue 编号可以是字符串(如 `IJP3UP`),不全是数字。开启企业项目管理的仓库会生成字母数字混合编号。`ge issue close` 等命令同时支持数字和字符串编号。
### 平台相关行为
- 仓库设置 `has_issues: false` 时,Issue 操作会返回 400,属于正常限制
- 开启企业项目管理的仓库,部分 Issue 走企业子系统 API,可能返回 404
- `ge pr review` 偶发返回 403,是 Gitee 侧的已知行为,重试即可
> 遇到异常时,先查 [Gitee 官方 Swagger 文档](https://gitee.com/api/v5/swagger) 确认是否为平台行为。
## 开发
```bash
# 构建
make build
# 测试
make test
# 代码检查
make lint
# 多平台构建
make build-all
```
### 运行集成测试
```bash
# 单元测试(不需要 Token)
go test ./...
# 集成测试(需要真实 Gitee API)
GITEE_TOKEN=your_token GE_INTEGRATION_TEST=1 go test ./tests/...
```
---
## 贡献
欢迎贡献代码!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详情。
1. Fork 本仓库
2. 创建功能分支:`git checkout -b feature/amazing-feature`
3. 提交更改:`git commit -m 'feat: add amazing feature'`
4. 推送分支:`git push origin feature/amazing-feature`
5. 创建 Pull Request
## 许可证
[MIT License](LICENSE)
## 链接
- [Gitee API v5 文档](https://gitee.com/api/v5/swagger)
- [GitHub CLI (gh)](https://github.com/cli/cli) — 架构参考
- [问题反馈](https://gitee.com/imjoey/ge/issues)
---
**如果 ge 对你有帮助,请给个 ⭐ Star 支持一下!**