From 5adbe4b111c26f9b998b2d764bc95e642935023b Mon Sep 17 00:00:00 2001 From: wbtiger <28288271@qq.com> Date: Fri, 17 Apr 2026 10:07:03 +0800 Subject: [PATCH] delete test log --- doc/CODE_SYNC_STRATEGY.md | 482 ---------------------- doc/CODE_SYNC_STRATEGY_FINAL.md | 373 ----------------- doc/CODE_SYNC_STRATEGY_REVIEW.md | 595 --------------------------- doc/SKILLS_TEST_REPORT_2026-04-02.md | 107 ----- doc/TEST_REPORT_2026-04-01.md | 483 ---------------------- doc/apifox_tree.json | 1 - 6 files changed, 2041 deletions(-) delete mode 100644 doc/CODE_SYNC_STRATEGY.md delete mode 100644 doc/CODE_SYNC_STRATEGY_FINAL.md delete mode 100644 doc/CODE_SYNC_STRATEGY_REVIEW.md delete mode 100644 doc/SKILLS_TEST_REPORT_2026-04-02.md delete mode 100644 doc/TEST_REPORT_2026-04-01.md delete mode 100644 doc/apifox_tree.json diff --git a/doc/CODE_SYNC_STRATEGY.md b/doc/CODE_SYNC_STRATEGY.md deleted file mode 100644 index a1a6516..0000000 --- a/doc/CODE_SYNC_STRATEGY.md +++ /dev/null @@ -1,482 +0,0 @@ -# GitLink-GitHub 代码双向同步方案 - -**版本**: v1.0 -**日期**: 2026-04-02 -**状态**: 已确认 - ---- - -## 1 概述 - -实现 GitHub(主仓)和 GitLink(镜像仓)的代码双向同步,确保两个平台的代码始终一致。通过 Git hooks 在关键操作点进行同步检查,自动解决冲突或提示用户手动处理。 - -### 1.1 核心原则 - -- **GitHub 为主仓**:GitHub 是代码的唯一真实来源 -- **GitLink 为镜像仓**:GitLink 作为备份和协作平台 -- **Hook 控制在 GitLink**:所有同步逻辑通过 GitLink 本地 hooks 实现 -- **GitHub 完全被动**:GitHub 不需要任何 hook 操作 -- **冲突自动解决**:优先自动 rebase 解决,无法解决时提示用户 - ---- - -## 2 同步触发点 - -### 2.1 四个关键触发点 - -| 触发点 | Hook | 检查内容 | 动作 | -|--------|------|---------|------| -| **直接 commit** | `pre-commit` | GitLink HEAD vs GitHub HEAD | 不同步则阻止 commit | -| **直接 push** | `pre-push` | GitLink HEAD vs GitHub HEAD | 不同步则阻止 push | -| **创建 PR** | Webhook | 拉取最新 GitHub 代码 | 自动 rebase 到最新 GitHub 代码 | -| **Merge PR** | Webhook | 拉取最新 GitHub 代码 + 自动 rebase | 解决冲突后 merge,并推送到 GitHub | - -### 2.2 触发点详解 - -#### 2.2.1 Pre-commit Hook(直接 commit) - -**场景**:用户在 GitLink 本地修改代码后执行 `git commit` - -**流程**: -``` -1. 用户执行: git commit -m "..." -2. pre-commit hook 触发 -3. 检查: GitLink HEAD == GitHub HEAD? - - 是 → 允许 commit - - 否 → 阻止 commit,提示用户执行 rebase -``` - -**实现**: -```bash -#!/bin/bash -# .git/hooks/pre-commit - -GITHUB_HEAD=$(git ls-remote https://github.com/owner/repo HEAD | awk '{print $1}') -GITLINK_HEAD=$(git rev-parse HEAD) - -if [ "$GITHUB_HEAD" != "$GITLINK_HEAD" ]; then - echo "❌ Error: GitLink HEAD 不同步 GitHub" - echo "请执行: git fetch github && git rebase github/main" - exit 1 -fi -exit 0 -``` - -#### 2.2.2 Pre-push Hook(直接 push) - -**场景**:用户在 GitLink 本地修改代码后执行 `git push` - -**流程**: -``` -1. 用户执行: git push origin main -2. pre-push hook 触发 -3. 检查: GitLink HEAD == GitHub HEAD? - - 是 → 允许 push - - 否 → 阻止 push,提示用户执行 rebase -``` - -**实现**: -```bash -#!/bin/bash -# .git/hooks/pre-push - -GITHUB_HEAD=$(git ls-remote https://github.com/owner/repo HEAD | awk '{print $1}') -GITLINK_HEAD=$(git rev-parse HEAD) - -if [ "$GITHUB_HEAD" != "$GITLINK_HEAD" ]; then - echo "❌ Error: GitLink HEAD 不同步 GitHub" - echo "请执行: git fetch github && git rebase github/main" - exit 1 -fi -exit 0 -``` - -#### 2.2.3 创建 PR 时同步(Webhook) - -**场景**:用户在 GitLink 创建 PR - -**流程**: -``` -1. 用户在 GitLink 创建 PR: feature → main -2. GitLink webhook 触发 -3. 拉取最新 GitHub 代码到 GitLink -4. 自动 rebase PR 分支到最新 GitHub main -5. 如果冲突可自动解决 → 直接解决 -6. 如果冲突无法自动解决 → 提示用户手动解决 -``` - -**实现逻辑**: -``` -POST /webhook/pr-created -├─ 获取 PR 信息 (source_branch, target_branch) -├─ git fetch github main -├─ git checkout source_branch -├─ git rebase github/main -│ ├─ 冲突可解决 → 自动解决 + git rebase --continue -│ └─ 冲突无法解决 → 提示用户,PR 标记为 "需要手动 rebase" -└─ 更新 PR 状态 -``` - -#### 2.2.4 Merge PR 时同步(Webhook) - -**场景**:用户在 GitLink 合并 PR - -**流程**: -``` -1. 用户在 GitLink 点击 "Merge PR" -2. GitLink webhook 触发 -3. 拉取最新 GitHub 代码到 GitLink -4. 自动 rebase PR 分支到最新 GitHub main -5. 如果冲突可自动解决 → 直接解决 + merge -6. 如果冲突无法自动解决 → 停止 merge,提示用户 -7. Merge 成功后,自动 push 到 GitHub -``` - -**实现逻辑**: -``` -POST /webhook/pr-merge -├─ 获取 PR 信息 (source_branch, target_branch) -├─ git fetch github main -├─ git checkout source_branch -├─ git rebase github/main -│ ├─ 冲突可解决 → 自动解决 + git rebase --continue -│ └─ 冲突无法解决 → 停止 merge,返回错误 -├─ git checkout target_branch -├─ git merge source_branch -├─ git push github target_branch -└─ 更新 PR 状态为 "已合并" -``` - ---- - -## 3 冲突处理策略 - -### 3.1 冲突类型与解决方案 - -| 冲突类型 | 原因 | 解决方案 | -|---------|------|--------| -| **文件内容冲突** | 同一文件同一行被修改 | 自动 rebase(Git 尝试自动合并) | -| **文件删除冲突** | 一边删除,一边修改 | 提示用户手动选择 | -| **文件重命名冲突** | 同一文件被重命名为不同名称 | 提示用户手动选择 | -| **二进制文件冲突** | 二进制文件被修改 | 提示用户手动选择 | - -### 3.2 自动解决策略 - -**可自动解决的冲突**: -- 不同文件的修改 -- 同一文件不同行的修改 -- 简单的文本冲突(Git 能自动合并) - -**实现**: -```bash -git rebase github/main --no-edit - -# 如果有冲突,尝试自动解决 -if [ $? -ne 0 ]; then - # 尝试使用 ours 或 theirs 策略 - git rebase --continue --strategy=recursive -X ours -fi -``` - -### 3.3 无法自动解决时的处理 - -**流程**: -``` -1. Rebase 失败,存在冲突 -2. 返回错误信息给用户 -3. PR 标记为 "冲突" 状态 -4. 用户本地手动解决冲突 -5. 用户执行: git rebase --continue -6. 用户 push 到 GitLink -7. Pre-push hook 检查 → 通过 -8. 用户重新点击 "Merge PR" -``` - ---- - -## 4 实现架构 - -### 4.1 组件清单 - -| 组件 | 位置 | 职责 | -|------|------|------| -| **Pre-commit Hook** | `.git/hooks/pre-commit` | 检查 commit 前的同步状态 | -| **Pre-push Hook** | `.git/hooks/pre-push` | 检查 push 前的同步状态 | -| **PR Created Webhook** | GitLink 服务端 | 创建 PR 时自动 rebase | -| **PR Merged Webhook** | GitLink 服务端 | Merge PR 时自动 rebase + push GitHub | -| **Sync CLI Command** | `gitlink-cli sync` | 手动触发同步(可选) | - -### 4.2 数据流 - -``` -GitHub (主仓) - ↓ (git fetch) -GitLink 本地仓库 - ├─ pre-commit hook (检查同步) - ├─ pre-push hook (检查同步) - └─ webhook (创建/合并 PR 时自动 rebase) - ↓ (git push) -GitLink 远程仓库 - ↓ (webhook) -GitHub (推送更新) -``` - ---- - -## 5 用户工作流 - -### 5.1 场景 1:直接 commit 到 GitLink - -```bash -# 1. 用户在 GitLink 本地修改代码 -cd gitlink-cli -echo "new code" >> file.txt - -# 2. 执行 commit -git commit -m "feat: add new feature" - -# 3. Pre-commit hook 检查 -# ✅ 如果 HEAD 同步 → commit 成功 -# ❌ 如果 HEAD 不同步 → commit 失败,提示 rebase - -# 4. 如果失败,用户手动 rebase -git fetch github -git rebase github/main - -# 5. 重新 commit -git commit -m "feat: add new feature" -``` - -### 5.2 场景 2:创建 PR - -```bash -# 1. 用户创建 feature 分支 -git checkout -b feature/new-feature - -# 2. 修改代码并 commit -git commit -m "feat: implement feature" - -# 3. Push 到 GitLink -git push origin feature/new-feature - -# 4. 在 GitLink 创建 PR: feature/new-feature → main -# GitLink webhook 自动触发: -# - 拉取最新 GitHub 代码 -# - 自动 rebase feature 分支到最新 GitHub main -# - 如果冲突可解决 → 自动解决 -# - 如果冲突无法解决 → PR 标记为 "需要手动 rebase" -``` - -### 5.3 场景 3:Merge PR - -```bash -# 1. 用户在 GitLink 点击 "Merge PR" -# GitLink webhook 自动触发: -# - 拉取最新 GitHub 代码 -# - 自动 rebase PR 分支到最新 GitHub main -# - 如果冲突可解决 → 自动解决 + merge -# - 如果冲突无法解决 → merge 失败,提示用户 - -# 2. Merge 成功后,自动 push 到 GitHub -# GitHub 代码自动更新 -``` - -### 5.4 场景 4:直接 push 到 GitLink - -```bash -# 1. 用户本地修改代码并 commit -git commit -m "fix: bug fix" - -# 2. 执行 push -git push origin main - -# 3. Pre-push hook 检查 -# ✅ 如果 HEAD 同步 → push 成功 -# ❌ 如果 HEAD 不同步 → push 失败,提示 rebase - -# 4. 如果失败,用户手动 rebase -git fetch github -git rebase github/main -git push origin main -``` - ---- - -## 6 配置与部署 - -### 6.1 Hook 安装 - -在 gitlink-cli 项目中创建 hooks: - -```bash -# 创建 hooks 目录 -mkdir -p .githooks - -# 创建 pre-commit hook -cat > .githooks/pre-commit << 'EOF' -#!/bin/bash -GITHUB_HEAD=$(git ls-remote https://github.com/owner/repo HEAD | awk '{print $1}') -GITLINK_HEAD=$(git rev-parse HEAD) -if [ "$GITHUB_HEAD" != "$GITLINK_HEAD" ]; then - echo "❌ Error: GitLink HEAD 不同步 GitHub" - echo "请执行: git fetch github && git rebase github/main" - exit 1 -fi -exit 0 -EOF - -# 创建 pre-push hook -cat > .githooks/pre-push << 'EOF' -#!/bin/bash -GITHUB_HEAD=$(git ls-remote https://github.com/owner/repo HEAD | awk '{print $1}') -GITLINK_HEAD=$(git rev-parse HEAD) -if [ "$GITHUB_HEAD" != "$GITLINK_HEAD" ]; then - echo "❌ Error: GitLink HEAD 不同步 GitHub" - echo "请执行: git fetch github && git rebase github/main" - exit 1 -fi -exit 0 -EOF - -# 设置权限 -chmod +x .githooks/pre-commit .githooks/pre-push - -# 配置 Git 使用这些 hooks -git config core.hooksPath .githooks -``` - -### 6.2 Webhook 配置 - -在 GitLink 项目设置中配置 webhooks: - -**PR Created Webhook**: -- URL: `https://your-server/webhook/pr-created` -- 事件: Pull Request Created -- 负载: PR 信息(source_branch, target_branch, pr_id) - -**PR Merged Webhook**: -- URL: `https://your-server/webhook/pr-merged` -- 事件: Pull Request Merged -- 负载: PR 信息(source_branch, target_branch, pr_id) - ---- - -## 7 风险与缓解 - -### 7.1 潜在风险 - -| 风险 | 影响 | 缓解措施 | -|------|------|--------| -| **Rebase 失败** | PR 无法合并 | 提示用户手动解决,PR 标记为冲突 | -| **GitHub 网络不可达** | Hook 超时 | 设置超时时间,失败时提示用户 | -| **Webhook 失败** | 同步不及时 | 重试机制 + 手动同步命令 | -| **并发 merge** | 数据不一致 | 使用分布式锁或队列 | - -### 7.2 缓解方案 - -**Hook 超时处理**: -```bash -timeout 5 git ls-remote https://github.com/owner/repo HEAD -if [ $? -eq 124 ]; then - echo "⚠️ Warning: GitHub 网络超时,跳过同步检查" - exit 0 # 允许操作继续 -fi -``` - -**Webhook 重试**: -``` -失败 → 等待 5 秒 → 重试 -失败 → 等待 10 秒 → 重试 -失败 → 等待 30 秒 → 重试 -失败 → 记录日志,通知管理员 -``` - ---- - -## 8 手动同步命令(可选) - -提供 CLI 命令供用户手动触发同步: - -```bash -# 手动同步 GitLink 到最新 GitHub 代码 -gitlink-cli sync --from github --to gitlink - -# 手动同步 GitHub 到最新 GitLink 代码(不推荐) -gitlink-cli sync --from gitlink --to github - -# 查看同步状态 -gitlink-cli sync status -``` - ---- - -## 9 验证与测试 - -### 9.1 测试场景 - -| 场景 | 预期结果 | 验证方法 | -|------|---------|--------| -| GitHub 有新代码,GitLink 直接 commit | Commit 失败,提示 rebase | 执行 commit,检查错误信息 | -| GitHub 有新代码,GitLink 直接 push | Push 失败,提示 rebase | 执行 push,检查错误信息 | -| 创建 PR 时 GitHub 有新代码 | 自动 rebase,PR 创建成功 | 创建 PR,检查 PR 状态 | -| Merge PR 时 GitHub 有新代码 | 自动 rebase + merge,推送 GitHub | Merge PR,检查 GitHub 代码 | -| 冲突无法自动解决 | PR 标记为��突,提示用户 | 创建冲突 PR,检查状态 | - -### 9.2 测试命令 - -```bash -# 1. 测试 pre-commit hook -git commit -m "test" - -# 2. 测试 pre-push hook -git push origin main - -# 3. 测试 PR 创建同步 -# 在 GitLink 创建 PR,检查是否自动 rebase - -# 4. 测试 PR 合并同步 -# 在 GitLink 合并 PR,检查 GitHub 是否更新 -``` - ---- - -## 10 后续优化 - -### 10.1 短期(1-2 周) - -- [ ] 实现 pre-commit 和 pre-push hooks -- [ ] 实现 PR Created 和 PR Merged webhooks -- [ ] 编写测试用例 -- [ ] 文档完善 - -### 10.2 中期(2-4 周) - -- [ ] 实现手动同步 CLI 命令 -- [ ] 添加同步状态监控 -- [ ] 优化冲突自动解决策略 -- [ ] 添加日志和告警 - -### 10.3 长期(1 个月+) - -- [ ] Issue 和 PR 元数据同步 -- [ ] 评论和 Review 同步 -- [ ] 自动化测试和 CI/CD 集成 -- [ ] 性能优化和扩展性改进 - ---- - -## 11 总结 - -本方案通过 **Git hooks + Webhooks** 的组合,实现了 GitHub 和 GitLink 的代码双向同步。核心特点: - -✅ **GitHub 为主仓**:确保代码唯一真实来源 -✅ **自动冲突解决**:优先自动 rebase,无法解决时提示用户 -✅ **多触发点**:commit、push、PR 创建、PR 合并都有同步检查 -✅ **用户友好**:清晰的错误提示和恢复指导 -✅ **低风险**:失败时提示用户,不会自动破坏代码 - ---- - -**审批人**: [待确认] -**实施日期**: [待定] -**联系人**: [待定] diff --git a/doc/CODE_SYNC_STRATEGY_FINAL.md b/doc/CODE_SYNC_STRATEGY_FINAL.md deleted file mode 100644 index 75c84f4..0000000 --- a/doc/CODE_SYNC_STRATEGY_FINAL.md +++ /dev/null @@ -1,373 +0,0 @@ -# GitLink-GitHub 代码双向同步方案(最终版) - -**版本**: v2.0(最终确认) -**日期**: 2026-04-02 -**状态**: 已确认,可实施 - ---- - -## 1 核心原则 - -- **GitHub 为主仓**:GitHub 是代码的唯一真实来源 -- **GitLink 为镜像仓**:GitLink 作为备份和协作平台 -- **所有操作在 GitLink 服务端**:无需用户本地配置 -- **Main 分支保护**:只能通过 PR merge,禁止直接 push -- **关键点同步**:PR create/patch/merge 时自动同步 GitHub - ---- - -## 2 同步触发点 - -### 2.1 三个关键触发点 - -| 触发点 | 事件 | 操作 | -|--------|------|------| -| **PR Create** | 用户创建 PR | fetch GitHub + rebase | -| **PR Patch** | 用户修改 PR(push 新 commit) | fetch GitHub + rebase | -| **PR Merge** | 用户点击 merge | fetch GitHub + rebase + merge + push GitHub | - -### 2.2 详细流程 - -#### 2.2.1 PR Create 时同步 - -**触发**:用户在 GitLink 创建 PR(feature → main) - -**流程**: -``` -1. GitLink webhook 接收 PR created 事件 -2. 执行: - ├─ git fetch github main - ├─ git checkout feature_branch - ├─ git rebase github/main - ├─ 检查是否有冲突 - │ ├─ 有冲突 → PR 标记为 "需要 rebase" - │ │ 返回错误信息给用户 - │ └─ 无冲突 → PR 状态正常,可以 merge - └─ 完成 -``` - -**用户体验**: -- 如果无冲突:PR 创建成功,可以 merge -- 如果有冲突:PR 创建成功,但标记为冲突,提示用户本地解决冲突后重新 push - -#### 2.2.2 PR Patch 时同步 - -**触发**:用户修改 PR(在 feature 分支上新增 commit 并 push) - -**流程**: -``` -1. GitLink webhook 接收 PR updated 事件 -2. 执行: - ├─ git fetch github main - ├─ git checkout feature_branch - ├─ git rebase github/main - ├─ 检查是否有冲突 - │ ├─ 有冲突 → PR 标记为 "需要 rebase" - │ │ 返回错误信息给用户 - │ └─ 无冲突 → PR 状态正常,可以 merge - └─ 完成 -``` - -**用户体验**: -- 每次 push 新 commit 时,自动检查是否与 GitHub 最新代码冲突 -- 如果有冲突,立即提示用户 - -#### 2.2.3 PR Merge 时同步 - -**触发**:用户在 GitLink 点击 "Merge PR" - -**流程**: -``` -1. GitLink webhook 接收 PR merged 事件 -2. 执行(事务性操作): - ├─ git fetch github main - ├─ git checkout feature_branch - ├─ git rebase github/main - ├─ 检查是否有冲突 - │ ├─ 有冲突 → merge 失败 - │ │ 返回错误信息给用户 - │ │ PR 状态回滚到 "open" - │ └─ 无冲突 → 继续 - ├─ git checkout main - ├─ git merge feature_branch - ├─ git push github main - ├─ 检查 push 是否成功 - │ ├─ 失败 → merge 失败,回滚 - │ └─ 成功 → merge 成功,PR 标记为 "merged" - └─ 完成 -``` - -**用户体验**: -- 点击 merge 后,自动完成所有同步操作 -- 如果有冲突或 push 失败,立即反馈给用户 -- 成功后,GitHub 和 GitLink 代码自动同步 - ---- - -## 3 Main 分支保护 - -### 3.1 保护规则 - -| 规则 | 说明 | -|------|------| -| 禁止直接 push | 用户不能直接 push 到 main 分支 | -| 只能 PR merge | main 分支只能通过 PR merge 更新 | -| 禁止 force push | GitLink 禁止所有 force push 操作 | - -### 3.2 实现 - -在 GitLink 服务端配置分支保护: - -``` -项目设置 → 分支保护 -├─ 分支名称: main -├─ 禁止直接 push: ✅ -├─ 禁止 force push: ✅ -└─ 只能通过 PR merge: ✅ -``` - ---- - -## 4 用户工作流 - -### 4.1 场景 1:创建 PR - -```bash -# 1. 用户在本地创建 feature 分支 -git checkout -b feature/new-feature - -# 2. 修改代码并 commit -git commit -m "feat: implement feature" - -# 3. Push 到 GitLink -git push origin feature/new-feature - -# 4. 在 GitLink 创建 PR: feature/new-feature → main -# GitLink webhook 自动触发: -# - fetch github main -# - rebase feature 到 github/main -# - 如果无冲突 → PR 创建成功 -# - 如果有冲突 → PR 标记为 "需要 rebase",提示用户 -``` - -### 4.2 场景 2:修改 PR(Patch) - -```bash -# 1. 用户在 feature 分支继续修改 -git add . -git commit -m "fix: address review comments" - -# 2. Push 到 GitLink -git push origin feature/new-feature - -# 3. GitLink webhook 自动触发: -# - fetch github main -# - rebase feature 到 github/main -# - 如果无冲突 → PR 更新成功 -# - 如果有冲突 → PR 标记为 "需要 rebase",提示用户 -``` - -### 4.3 场景 3:Merge PR - -```bash -# 1. 用户在 GitLink 点击 "Merge PR" -# GitLink webhook 自动触发: -# - fetch github main -# - rebase feature 到 github/main -# - merge feature 到 main -# - push 到 github main -# - 如果无冲突 → merge 成功,GitHub 自动更新 -# - 如果有冲突 → merge 失败,提示用户 -``` - -### 4.4 场景 4:直接 Push(不允许) - -```bash -# 用户尝试直接 push 到 main -git push origin main - -# GitLink 拒绝: -# ❌ Error: 禁止直接 push 到 main 分支 -# 请通过 PR merge 提交代码 -``` - ---- - -## 5 冲突处理 - -### 5.1 冲突检测 - -在 PR create/patch/merge 时,GitLink 自动检查是否有冲突: - -```bash -git rebase github/main - -# 如果有冲突,rebase 会失败 -if [ $? -ne 0 ]; then - # 有冲突 - return error "冲突检测" -fi -``` - -### 5.2 冲突提示 - -当检测到冲突时,返回给用户: - -```json -{ - "ok": false, - "error": { - "code": "CONFLICT", - "message": "PR 与 GitHub 最新代码有冲突", - "details": { - "conflicted_files": ["file1.js", "file2.js"], - "suggestion": "请在本地解决冲突后重新 push" - } - } -} -``` - -### 5.3 用户解决冲突 - -```bash -# 1. 用户本地拉取最新代码 -git fetch origin -git fetch github - -# 2. 本地 rebase 到 github/main -git rebase github/main - -# 3. 手动解决冲突 -# 编辑冲突文件,解决冲突 - -# 4. 继续 rebase -git add . -git rebase --continue - -# 5. 强制推送到 GitLink(覆盖之前的 commit) -git push origin feature/new-feature --force-with-lease - -# 6. GitLink 再次检查冲突 -# 如果无冲突 → PR 更新成功 -``` - ---- - -## 6 错误处理 - -### 6.1 常见错误 - -| 错误 | 原因 | 解决方案 | -|------|------|--------| -| 冲突 | PR 与 GitHub 最新代码冲突 | 本地解决冲突后重新 push | -| Push 失败 | GitHub 网络问题 | 重试或联系管理员 | -| Merge 失败 | 冲突或权限问题 | 检查冲突或权限 | - -### 6.2 错误恢复 - -**如果 PR merge 失败**: - -``` -1. GitLink 自动回滚 merge 操作 -2. PR 状态回到 "open" -3. 用户收到错误提示 -4. 用户解决问题后重新 merge -``` - ---- - -## 7 实现清单 - -### 7.1 GitLink 服务端 - -- [ ] 配置 main 分支保护(禁止直接 push、禁止 force push) -- [ ] 实现 PR created webhook - - [ ] fetch github main - - [ ] rebase feature 到 github/main - - [ ] 检查冲突,标记 PR 状态 -- [ ] 实现 PR updated webhook - - [ ] fetch github main - - [ ] rebase feature 到 github/main - - [ ] 检查冲突,标记 PR 状态 -- [ ] 实现 PR merged webhook(事务性操作) - - [ ] fetch github main - - [ ] rebase feature 到 github/main - - [ ] merge feature 到 main - - [ ] push 到 github main - - [ ] 失败时回滚 - -### 7.2 错误提示 - -- [ ] 冲突时返回详细错误信息 -- [ ] 包含冲突文件列表 -- [ ] 包含解决方案建议 - -### 7.3 文档 - -- [ ] 更新 README,说明 main 分支保护规则 -- [ ] 编写用户指南,说明 PR 工作流 -- [ ] 编写故障排查指南 - ---- - -## 8 验证与测试 - -### 8.1 测试场景 - -| 场景 | 预期结果 | -|------|---------| -| 创建无冲突 PR | PR 创建成功 | -| 创建有冲突 PR | PR 标记为冲突,提示用户 | -| Patch 无冲突 | PR 更新成功 | -| Patch 有冲突 | PR 标记为冲突,提示用户 | -| Merge 无冲突 | Merge 成功,GitHub 自动更新 | -| Merge 有冲突 | Merge 失败,PR 回滚到 open | -| 直接 push main | 拒绝,提示只能 PR merge | -| Force push | 拒绝,提示禁止 force push | - -### 8.2 测试命令 - -```bash -# 1. 创建 PR -git checkout -b feature/test -echo "test" >> file.txt -git commit -m "test" -git push origin feature/test -# 在 GitLink 创建 PR - -# 2. 修改 PR -echo "test2" >> file.txt -git commit -m "test2" -git push origin feature/test - -# 3. Merge PR -# 在 GitLink 点击 merge - -# 4. 验证 GitHub 是否更新 -git log --oneline # 检查 GitHub 是否有新 commit -``` - ---- - -## 9 总结 - -**方案特点**: - -✅ **简洁**:只在 PR create/patch/merge 时同步 -✅ **安全**:main 分支保护,禁止直接 push -✅ **可靠**:事务性 merge,失败自动回滚 -✅ **用户友好**:清晰的错误提示和恢复指导 -✅ **无需本地配置**:所有操作在 GitLink 服务端 - -**预期效果**: - -- GitHub 和 GitLink 代码始终一致 -- 用户只需正常 git 操作 -- 冲突自动检测,提示用户解决 -- 代码质量有保证(PR review + merge) - ---- - -**审批**:已确认 -**实施日期**:待定 -**联系人**:待定 diff --git a/doc/CODE_SYNC_STRATEGY_REVIEW.md b/doc/CODE_SYNC_STRATEGY_REVIEW.md deleted file mode 100644 index 264b31d..0000000 --- a/doc/CODE_SYNC_STRATEGY_REVIEW.md +++ /dev/null @@ -1,595 +0,0 @@ -# 代码同步方案 - 深度审视与优化 - -**审视日期**: 2026-04-02 -**审视范围**: 用户场景、漏洞、优化点 - ---- - -## 1 发现的关键漏洞 - -### 1.1 漏洞 1:GitHub 直接 push 无法同步到 GitLink - -**问题描述**: -- 用户在 GitHub 直接 push 代码(不通过 GitLink) -- GitLink 本地仓库不知道 GitHub 有新代码 -- 下次用户在 GitLink 操作时,HEAD 已经不同步,但用户不知道 - -**场景**: -``` -1. 用户在 GitHub Web UI 直接修改文件并 commit -2. 或用户在另一台机器 push 到 GitHub -3. GitLink 本地仓库 HEAD 仍指向旧代码 -4. 用户在 GitLink 执行 commit/push 时,pre-commit/pre-push hook 才发现不同步 -5. 用户被迫 rebase,但此时可能已经做了本地修改 -``` - -**影响**: -- 用户体验差:突然被告知需要 rebase -- 可能丢失本地修改:如果用户强制操作 - -**优化方案**: -- 添加 **post-checkout hook**:每次切换分支时检查 GitHub 是否有新代码 -- 添加 **post-merge hook**:每次 merge 后检查 GitHub 是否有新代码 -- 提供 **定时同步任务**:每 N 分钟自动检查一次 GitHub 是否有新代码 - ---- - -### 1.2 漏洞 2:Force Push 绕过 Hook - -**问题描述**: -- 用户可以使用 `git push --force` 绕过 pre-push hook -- 这会导致 GitLink 和 GitHub 代码不一致 - -**场景**: -```bash -git push origin main --force # 绕过 pre-push hook -``` - -**影响**: -- 破坏同步机制 -- 可能覆盖他人代码 - -**优化方案**: -- 在 pre-push hook 中检查 `--force` 标志,直接拒绝 -- 或在 GitLink 服务端配置分支保护,禁止 force push - ---- - -### 1.3 漏洞 3:多分支场景处理不清 - -**问题描述**: -- 方案只考虑了 `main` 分支的同步 -- 用户可能在多个分支上工作(develop、feature 等) -- 不同分支的同步策略不同 - -**场景**: -``` -1. 用户在 feature 分支工作 -2. GitHub 的 main 分支有新代码 -3. 用户在 feature 分支 commit,pre-commit hook 检查 main 分支 -4. 但用户实际在 feature 分支,不需要同步 main -``` - -**影响**: -- Hook 逻辑不清:应该检查当前分支还是 main 分支? -- 可能误报或漏报 - -**优化方案**: -- **明确分支同步策略**: - - `main` 分支:必须与 GitHub main 同步 - - `develop` 分支:必须与 GitHub develop 同步 - - `feature/*` 分支:只需与本地 main 同步(可选) -- Hook 根据当前分支选择对应的检查策略 - ---- - -### 1.4 漏洞 4:Rebase 冲突后的恢复流程不清 - -**问题描述**: -- 用户执行 `git rebase github/main` 后,如果有冲突 -- 用户手动解决冲突后,需要 `git rebase --continue` -- 但方案没有明确说明这个流程 - -**场景**: -```bash -git rebase github/main -# 冲突! -# 用户手动解决冲突 -git add . -git rebase --continue -# 现在可以 commit 了 -``` - -**影响**: -- 用户可能不知道如何恢复 -- 可能导致 rebase 中止或错误操作 - -**优化方案**: -- 在 hook 失败时提供详细的恢复指导 -- 提供 `gitlink-cli sync --resolve` 命令自动处理恢复流程 - ---- - -### 1.5 漏洞 5:Webhook 失败时的数据一致性问题 - -**问题描述**: -- PR 在 GitLink 成功 merge,但 webhook 推送到 GitHub 失败 -- GitLink 和 GitHub 代码不一致,且无法自动恢复 - -**场景**: -``` -1. 用户在 GitLink merge PR -2. GitLink 本地 merge 成功 -3. Webhook 尝试 push 到 GitHub,但网络失败 -4. GitLink 已 merge,GitHub 未更新 -5. 下次用户操作时,发现不一致 -``` - -**影响**: -- 数据不一致 -- 需要手动干预恢复 - -**优化方案**: -- **事务性操作**:merge 和 push 作为一个原子操作 -- **重试机制**:webhook 失败时自动重试(指数退避) -- **死信队列**:重试失败后放入队列,定期重试 -- **监控告警**:同步失���时立即告警 - ---- - -### 1.6 漏洞 6:并发操作导致的竞态条件 - -**问题描述**: -- 多个用户同时在 GitLink 和 GitHub 操作 -- 可能导致竞态条件和数据不一致 - -**场景**: -``` -时间线: -T1: 用户 A 在 GitLink merge PR1 -T2: 用户 B 在 GitHub push 代码 -T3: 用户 A 的 webhook 尝试 push 到 GitHub -T4: 冲突!GitHub 已有用户 B 的代码 -``` - -**影响**: -- Push 失败 -- 需要手动解决 - -**优化方案**: -- **分布式锁**:merge 时加锁,防止并发 -- **版本控制**:记录每次同步的版本号 -- **冲突检测**:push 前检查 GitHub 是否有新代码 - ---- - -### 1.7 漏洞 7:Tag 和 Release 的同步 - -**问题描述**: -- 方案只考虑了代码同步 -- 没有考虑 tag 和 release 的同步 - -**场景**: -``` -1. 用户在 GitLink 创建 release v1.0.0 -2. GitHub 没有对应的 tag 和 release -3. 两个平台的版本信息不一致 -``` - -**影响**: -- 版本管理混乱 -- 用户困惑 - -**优化方案**: -- 添加 release 同步逻辑 -- 创建 release 时自动同步到 GitHub - ---- - -## 2 用户场景分析 - -### 2.1 场景 1:多设备开发 - -**用户行为**: -``` -设备 A(GitLink)→ commit → push GitLink -设备 B(GitHub)→ commit → push GitHub -设备 A(GitLink)→ commit → 发现不同步 -``` - -**当��方案的问题**: -- 设备 A 在 commit 时才发现不同步 -- 此时已经做了本地修改,需要 rebase - -**优化**: -- 添加 post-checkout hook,切换分支时检查同步状态 -- 提示用户 GitHub 有新代码,建议 rebase - ---- - -### 2.2 场景 2:紧急修复 - -**用户行为**: -``` -1. 用户在 GitHub 直接修复 bug(通过 Web UI) -2. 用户回到 GitLink,继续开发 -3. 用户 commit,发现需要 rebase -``` - -**当前方案的问题**: -- 用户体验差,被迫中断开发流程 - -**优化**: -- 提供 `gitlink-cli sync` 命令,用户可主动同步 -- 在 IDE 中集成同步提示 - ---- - -### 2.3 场景 3:大型团队协作 - -**用户行为**: -``` -1. 多个开发者同时在 GitLink 和 GitHub 操作 -2. PR 频繁创建和合并 -3. 代码冲突频繁 -``` - -**当前方案的问题**: -- 没有考虑并发控制 -- 可能导致数据不一致 - -**优化**: -- 添加分布式锁 -- 添加冲突检测和自动解决 - ---- - -### 2.4 场景 4:离线开发 - -**用户行为**: -``` -1. 用户离线开发,多次 commit -2. 用户上线后,尝试 push -3. 发现 GitHub 有新代码,需要 rebase -``` - -**当前方案的问题**: -- 用户需要 rebase 多次 commit -- 可能很复杂 - -**优化**: -- 提供 `gitlink-cli sync --squash` 命令,合并 commit 后再 rebase -- 简化恢复流程 - ---- - -## 3 优化建议 - -### 3.1 优化 1:完善 Hook 体系 - -**添加的 Hooks**: - -| Hook | 触发时机 | 职责 | -|------|---------|------| -| `pre-commit` | commit 前 | 检查 HEAD 同步 | -| `pre-push` | push 前 | 检查 HEAD 同步 | -| `post-checkout` | 切换分支后 | 检查 GitHub 是否有新代码,提示用户 | -| `post-merge` | merge 后 | 检查 GitHub 是否有新代码,提示用户 | - -**实现**: -```bash -# post-checkout hook -#!/bin/bash -GITHUB_HEAD=$(git ls-remote https://github.com/owner/repo HEAD | awk '{print $1}') -GITLINK_HEAD=$(git rev-parse HEAD) - -if [ "$GITHUB_HEAD" != "$GITLINK_HEAD" ]; then - echo "ℹ️ Info: GitHub 有新代码,建议执行: git fetch github && git rebase github/main" -fi -``` - ---- - -### 3.2 优化 2:明确分支同步策略 - -**分支分类**: - -| 分支类型 | 同步策略 | 说明 | -|---------|--------|------| -| `main` | 必须同步 | 主分支,必须与 GitHub 同步 | -| `develop` | 必须同步 | 开发分支,必须与 GitHub 同步 | -| `feature/*` | 可选同步 | 功能分支,可选与 main 同步 | -| `hotfix/*` | 必须同步 | 紧急修复,必须与 GitHub 同步 | - -**Hook 实现**: -```bash -CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) - -case $CURRENT_BRANCH in - main|develop|hotfix/*) - # 必��同步 - check_sync_required - ;; - feature/*) - # 可选同步 - check_sync_optional - ;; -esac -``` - ---- - -### 3.3 优化 3:添加主动同步命令 - -**新增命令**: - -```bash -# 检查同步状态 -gitlink-cli sync status - -# 主动同步(拉取 GitHub 最新代码) -gitlink-cli sync pull - -# 主动同步并 rebase(如果有冲突) -gitlink-cli sync pull --rebase - -# 自动解决冲突并继续 -gitlink-cli sync resolve - -# 查看同步日志 -gitlink-cli sync logs -``` - ---- - -### 3.4 优化 4:添加事务性 Merge - -**改进 Merge 流程**: - -``` -1. 开始事务 -2. 拉取最新 GitHub 代码 -3. Rebase PR 分支 -4. Merge 到 main -5. Push 到 GitHub -6. 提交事务 -7. 如果任何步骤失败,回滚事务 -``` - -**实现**: -```bash -# 伪代码 -begin_transaction() -try: - git fetch github - git rebase github/main - git merge source_branch - git push github main - commit_transaction() -except: - rollback_transaction() - raise error -``` - ---- - -### 3.5 优化 5:添加冲突检测和自动解决 - -**冲突检测**: - -```bash -# 检查是否有冲突 -git diff --name-only --diff-filter=U - -# 如果有冲突,尝试自动解决 -if [ -n "$(git diff --name-only --diff-filter=U)" ]; then - # 尝试使用 ours 策略 - git checkout --ours . - git add . - git rebase --continue -fi -``` - ---- - -### 3.6 优化 6:添加监控和告警 - -**监控指标**: - -| 指标 | 告警条件 | -|------|---------| -| Webhook 失败率 | > 5% | -| Sync 延迟 | > 5 分钟 | -| 冲突率 | > 10% | -| 数据不一致 | 任何检测到 | - -**实现**: -```bash -# 记录同步日志 -log_sync_event( - event_type: "merge", - status: "success|failure", - duration: 1.5s, - conflict_count: 0, - timestamp: 2026-04-02T10:30:00Z -) - -# 定期检查指标 -if webhook_failure_rate > 0.05: - alert("Webhook 失败率过高") -``` - ---- - -### 3.7 优化 7:添加用户指导和恢复工具 - -**改进错误提示**: - -```bash -# 当前 -❌ Error: GitLink HEAD 不同步 GitHub -请执行: git fetch github && git rebase github/main - -# 优化后 -❌ Error: GitLink HEAD 不同步 GitHub - -原因:GitHub 有新代码,GitLink 本地未同步 - -解决方案: -1. 拉取最新代码: git fetch github -2. Rebase 到最新: git rebase github/main -3. 如果有冲突,手动解决后执行: git rebase --continue -4. 重新 commit: git commit -m "..." - -或使用自动恢复命令: -gitlink-cli sync resolve - -需要帮助?查看文档:https://docs.gitlink.org.cn/sync -``` - ---- - -### 3.8 优化 8:添加 Force Push 保护 - -**在 pre-push hook 中检查**: - -```bash -# 检查是否使用了 --force -if [[ "$@" == *"--force"* ]] || [[ "$@" == *"-f"* ]]; then - echo "❌ Error: 禁止使用 force push" - echo "如果需要强制推送,请联系管理员" - exit 1 -fi -``` - ---- - -## 4 修订后的方案架构 - -### 4.1 完整的 Hook 体系 - -``` -用户操作 -├─ git checkout branch -│ └─ post-checkout hook -│ └─ 检查 GitHub 是否有新代码(提示,不阻止) -├─ git commit -│ └─ pre-commit hook -│ └─ 检查 HEAD 是否同步(阻止) -├─ git push -│ └─ pre-push hook -│ ├─ 检查 --force 标志(阻止) -│ └─ 检查 HEAD 是否同步(阻止) -└─ git merge - └─ post-merge hook - └─ 检查 GitHub 是否有新代码(提示,不阻止) -``` - -### 4.2 完整的 Webhook 体系 - -``` -GitLink 事件 -├─ PR Created -│ └─ 拉取 GitHub 最新代码 -│ └─ 自动 rebase -│ └─ 如果冲突无法解决,标记为 "需要手动 rebase" -├─ PR Merged -│ └─ 开始事务 -│ └─ 拉取 GitHub 最新代码 -│ └─ 自动 rebase -│ └─ Merge 到 main -│ └─ Push 到 GitHub -│ └─ 提交事务(或回滚) -└─ Release Created - └─ 同步 tag 和 release 到 GitHub -``` - -### 4.3 完整的 CLI 命令体系 - -``` -gitlink-cli sync -├─ status # 查看同步状态 -├─ pull # 拉取 GitHub 最新代码 -├─ pull --rebase # 拉取并 rebase -├─ resolve # 自动解决冲突 -├─ logs # 查看同步日志 -└─ force-push # 强制推送(需要管理员权限) -``` - ---- - -## 5 风险评估 - -### 5.1 修复前的风险 - -| 风险 | 严重性 | 修复方案 | -|------|--------|--------| -| GitHub 直接 push 无法同步 | 高 | post-checkout hook | -| Force push 绕过 hook | 高 | pre-push hook 检查 | -| 多分支场景处理不清 | 中 | 明确分支同步策略 | -| Rebase 冲突恢复流程不清 | 中 | 提供自动恢复命令 | -| Webhook 失败导致不一致 | 高 | 事务性操作 + 重试机制 | -| 并发操作竞态条件 | 中 | 分布式锁 | -| Tag/Release 不同步 | 低 | 添加 release 同步 | - -### 5.2 修复后的风险 - -| 风险 | 严重性 | 剩余风险 | -|------|--------|---------| -| GitHub 直接 push 无法同步 | 低 | 用户需要主动切换分支触发 hook | -| Force push 绕过 hook | 低 | 管理员可能需要强制推送 | -| 多分支场景处理不清 | 低 | 分支策略需要文档说明 | -| Rebase 冲突恢复流程不清 | 低 | 用户需要学习新命令 | -| Webhook 失败导致不一致 | 低 | 网络故障可能导致延迟 | -| 并发操作竞态条件 | 低 | 分布式锁可能有性能开销 | -| Tag/Release 不同步 | 低 | 需要额外实现 | - ---- - -## 6 实施优先级 - -### 6.1 第一阶段(必须) - -- [ ] 完善 pre-commit 和 pre-push hooks -- [ ] 添加 post-checkout hook -- [ ] 实现 PR Merged webhook 的事务性操作 -- [ ] 添加 force push 保护 - -### 6.2 第二阶段(重要) - -- [ ] 添加 `gitlink-cli sync` 命令 -- [ ] 实现冲突自动解决 -- [ ] 添加监控和告警 -- [ ] 完善错误提示和恢复指导 - -### 6.3 第三阶段(可选) - -- [ ] 添加分布式锁 -- [ ] 实现 release 同步 -- [ ] 添加 IDE 集成 -- [ ] 性能优化 - ---- - -## 7 总结 - -**原方案的主要漏洞**: -1. GitHub 直接 push 无法同步 -2. Force push 绕过 hook -3. 多分支场景处理不清 -4. Webhook 失败导致不一致 -5. 并发操作竞态条件 - -**修订后的方案**: -- 添加 post-checkout 和 post-merge hooks -- 明确分支同步策略 -- 实现事务性 merge -- 添加主动同步命令 -- 添加监控和告警 - -**预期效果**: -- ✅ 代码同步更可靠 -- ✅ 用户体验更好 -- ✅ 故障恢复更快 -- ✅ 数据一致性更强 - diff --git a/doc/SKILLS_TEST_REPORT_2026-04-02.md b/doc/SKILLS_TEST_REPORT_2026-04-02.md deleted file mode 100644 index 66e0c47..0000000 --- a/doc/SKILLS_TEST_REPORT_2026-04-02.md +++ /dev/null @@ -1,107 +0,0 @@ -# GitLink Skills 整体测试报告 - -**测试日期**: 2026-04-02 -**测试范围**: 8 个常用场景 + 边界情况 + 输出格式 - ---- - -## 测试结果总结 - -✅ **所有场景通过** (8/8) - -| 场景 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 认证 | `auth status` | ✅ | 正常登录 | -| 用户 | `user +me` | ✅ | 获取当前用户 | -| 搜索仓库 | `search +repos` | ✅ | 找到 2 个仓库 | -| 搜索用户 | `search +users` | ✅ | 找到 24 个用户 | -| 组织列表 | `org +list` | ✅ | 找到 2 个组织 | -| 组织详情 | `org +info` | ✅ | Gitlink 组织 54 个项目 | -| 组织成员 | `org +members` | ✅ | 列出成员 | -| 仓库操作 | `repo +list/+info` | ✅ | 正常工作 | -| 分支操作 | `branch +list` | ✅ | 列出 3 个分支 | -| Issue 操作 | `issue +list` | ✅ | 找到 1 个 Issue | - ---- - -## 边界情况测试 - -| 测试 | 结果 | 说明 | -|------|------|------| -| 无效 owner/repo | ✅ | 返回 404 错误 | -| 无效 Issue ID | ✅ | 返回 404 错误 | -| 搜索空结果 | ✅ | 返回空数组 | -| 分页 | ✅ | 正常工作 | -| Release 列表 | ✅ | 返回空列表 | -| PR 列表 | ✅ | 返回空列表 | - ---- - -## 输出格式测试 - -| 格式 | 结果 | 说明 | -|------|------|------| -| JSON | ✅ | 有效 JSON,包含 ok/data 字段 | -| Table | ✅ | 正常渲染表格 | -| YAML | ✅ | 正常转换 | -| 默认 | ✅ | 默认为 JSON 格式 | - ---- - -## 发现的问题 - -### 问题 1: Table 格式中 branches 字段显示不完整 - -**症状**: `branch +list --format table` 时,branches 字段显示为截断的 JSON 字符串 - -**原因**: Table 格式化器对嵌套对象的处理不够友好 - -**影响**: 低(用户通常用 JSON 格式) - -**建议**: 改进 Table 格式化器对复杂数据的处理 - ---- - -## Skills 文档评估 - -✅ **SKILL.md** - 清晰的命令参考 -✅ **REFERENCE.md** - 详细的 API 参考 -✅ **TROUBLESHOOTING.md** - 常见问题排查 -✅ **examples/** - 真实工作流示例 - -**改进建议**: -1. 为每个 Shortcut 添加返回值说明 -2. 添加更多错误场景的处理示例 -3. 为 Raw API 添加更多使用示例 - ---- - -## 总体评分 - -| 维度 | 评分 | 说明 | -|------|------|------| -| 功能完整性 | 9/10 | 核心功能完整,PR 创建有限制 | -| 文档质量 | 8/10 | 文档详细,但可增加更多示例 | -| 错误处理 | 8/10 | 错误提示清晰,但某些 API Bug 无法处理 | -| 易用性 | 9/10 | 命令直观,自动上下文解析好用 | - -**总体**: ✅ **生产就绪** (8.5/10) - ---- - -## 建议优化项 - -### 短期(立即) -1. ✅ 已完成:Skills 文档重构 -2. ✅ 已完成:添加工作流示例 -3. ✅ 已完成:添加故障排查指南 - -### 中期(1-2 周) -1. 改进 Table 格式化器 -2. 为 Raw API 添加更多示例 -3. 添加 CI/CD 工作流示例 - -### 长期(1 个月+) -1. 联系 GitLink 修复 5 个 API Bug -2. 添加 AI 自动化工作流模板 -3. 建立 Skills 版本管理机制 diff --git a/doc/TEST_REPORT_2026-04-01.md b/doc/TEST_REPORT_2026-04-01.md deleted file mode 100644 index 86c0c70..0000000 --- a/doc/TEST_REPORT_2026-04-01.md +++ /dev/null @@ -1,483 +0,0 @@ -# GitLink CLI 测试报告 - -**测试日期**: 2026-03-31 ~ 2026-04-01 -**测试账户**: wbtiger (user_id=87704, admin=true) -**测试环境**: macOS, Go 1.21+ -**API 基础 URL**: https://www.gitlink.org.cn/api - ---- - -## 执行摘要 - -本次测试对 gitlink-cli 进行了全面的实际 API 测试,覆盖 5 个核心开发场景。测试过程中发现并修复了 **3 个关键 Bug**,验证了 43 个 Shortcuts 中的 30+ 个功能。 - -**测试结果**: -- ✅ 场景 1 (仓库管理): 5/6 功能通过 (83%) -- ✅ 场景 2 (Issue 工作流): 5/5 功能通过 (100%) -- ⚠️ 场景 3 (PR 工作流): 1/7 功能通过 (14%) - 需要实际代码变更 -- ✅ 场景 4 (Release 发布): 3/4 功能通过 (75%) -- ✅ 场景 5 (搜索与发现): 7/7 功能通过 (100%) - -**总体通过率**: 21/29 = 72% - ---- - -## 发现的 Bug 及修复 - -**总计**: 7 个 Bug (2 个 CLI Bug 已修复 + 5 个 GitLink API Bug 未修复) - -### Bug #1: Issue 创建失败 - done_ratio 字段缺失 (CLI Bug - 已修复) - -**症状**: -``` -[-1] Mysql2::Error: Column 'done_ratio' cannot be null: INSERT INTO `issues` ... -``` - -**根本原因**: GitLink API 在创建 Issue 时要求 `done_ratio` 字段不能为 NULL - -**修复方案**: -```go -// shortcuts/issue/issue.go - issue +create -body := map[string]interface{}{ - "subject": title, - "done_ratio": 0, // ← 添加此字段 -} -``` - -**验证**: ✅ 已测试,issue +create 现在可正常创建 - -**影响范围**: issue +create shortcut - ---- - -### Bug #2: Issue 关闭失败 - 标题字段缺失 (CLI Bug - 已修复) - -**症状**: -``` -[-1] 验证失败: 标题不能为空 -``` - -**根本原因**: GitLink API 在更新 Issue 状态时要求 `subject` 字段必须存在 - -**修复方案**: -```go -// shortcuts/issue/issue.go - issue +close -// 先获取当前 Issue 信息 -getEnv, err := ctx.CallAPI("GET", fmt.Sprintf("%s/issues/%s", ctx.RepoPath(), id), nil) -issueData, _ := getEnv.Data.(map[string]interface{}) -subject, _ := issueData["subject"].(string) - -// 然后在更新时包含 subject -body := map[string]interface{}{ - "subject": subject, // ← 必须包含 - "status_id": 5, // 5 = closed -} -``` - -**验证**: ✅ 已测试,issue +close 现在可正常关闭 - -**影响范围**: issue +close shortcut - ---- - -### Bug #3: Branch 删除失败 - API 返回"分支不存在" (GitLink API Bug) - -**症状**: -``` -[-1] 分支不存在! -``` - -**现象**: -- branch +create 成功创建分支 -- branch +list 可以列出该分支 -- branch +delete 返回"分支不存在"错误 - -**调查结果**: -- 测试了多种 API 路径变体: - - ✅ `/v1/:owner/:repo/branches.json` (GET) - 可列出分支 - - ✅ `/v1/:owner/:repo/branches.json` (POST) - 可创建分支 - - ❌ `/v1/:owner/:repo/branches/:name.json` (DELETE) - 返回 404 - - ❌ `/:owner/:repo/branches/:name.json` (DELETE) - 返回 404 - -**根本原因**: GitLink API Bug - DELETE 端点实现有问题 - -**当前状态**: ⚠️ 未修复,需要与 GitLink 团队确认 - -**影响范围**: branch +delete shortcut - ---- - -### Bug #4: Release 删除失败 - API 返回"版本不存在" (GitLink API Bug) - -**症状**: -``` -[-1] 版本不存在 -``` - -**现象**: -- release +create 成功创建 Release -- release +list 可以列出该 Release (version_id=1752) -- release +delete 返回"版本不存在"错误 - -**根本原因**: GitLink API Bug - DELETE 端点实现有问题或权限限制 - -**当前状态**: ⚠️ 未修复,需要与 GitLink 团队确认 - -**影响范围**: release +delete shortcut - ---- - -### Bug #5: Release 查看返回 HTML (GitLink API Bug) - -**症状**: -``` -返回完整 HTML 页面而非 JSON -``` - -**现象**: -- `GET /api/{owner}/{repo}/releases/{tag_name}` 返回 HTML -- `GET /api/{owner}/{repo}/releases/{version_id}` 返回正确的 JSON - -**根本原因**: GitLink API 的 tag_name 路由指向 Web 页面而非 API - -**当前状态**: ✅ 已规避 - 使用 version_id 代替 tag_name - -**影响范围**: release +view shortcut (已通过使用 version_id 规避) - ---- - -### Bug #6: Create File API 返回"文件已存在" - -**症状**: -``` -[-1] {filename}文件已存在,不能重复创建! -``` - -**现象**: -- 在新创建的分支上调用 create_file -- 即使文件不存在也返回"文件已存在"错误 - -**测试**: -```bash -# 创建新分支 -branch +create -n pr-real-test-1775055754 # ✅ 成功 - -# 在新分支上创建文件 -api POST "/wbtiger/gitlink-cli/create_file" --body '{ - "filepath": "NEW_FILE.md", - "content": "test", - "branch": "pr-real-test-1775055754" -}' -# ❌ 返回: "NEW_FILE.md文件已存在,不能重复创建!" -``` - -**根本原因**: GitLink API Bug - create_file 端点���辑错误 - -**当前状态**: ⚠️ 未修复,无法通过 API 创建文件 - -**影响范围**: 无法通过 API 在分支上创建代码变更,导致 PR 创建失败 - ---- - -### Bug #7: Update File API 缺少 SHA 参数说明 - -**症状**: -``` -[-1] 验证失败: Sha不能为空字符 -``` - -**现象**: -- 调用 update_file 返回"Sha不能为空"错误 -- API 文档未说明需要 SHA 参数 - -**测试**: -```bash -api PUT "/wbtiger/gitlink-cli/update_file" --body '{ - "filepath": "README.md", - "content": "updated", - "branch": "pr-real-test-1775055754" -}' -# ❌ 返回: "验证失败: Sha不能为空字符" -``` - -**根本原因**: GitLink API 文档不完整,缺少必需参数说明 - -**当前状态**: ⚠️ 未修复,无法通过 API 更新文件 - -**影响范围**: 无法通过 API 修改文件内容 - ---- - -## 场景测试详情 - -### 场景 1: 仓库管理流程 - -| 功能 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 创建分支 | `branch +create -n test-branch` | ✅ | 成功 | -| 列出分支 | `branch +list -l 10` | ✅ | 返回 JSON 字符串格式 | -| 保护分支 | `branch +protect -n master` | ✅ | 成功 | -| 取消保护 | `branch +unprotect -n master` | ✅ | 成功 | -| 删除分支 | `branch +delete -n test-branch` | ❌ | API 返回"分支不存在" | -| 删除仓库 | `repo +delete` | ✅ | 成功 | - -**通过率**: 5/6 (83%) - ---- - -### 场景 2: Issue 全流程 - -| 功能 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 创建 Issue | `issue +create -t "标题" -b "描述"` | ✅ | 修复后成功 | -| 查看 Issue | `issue +view -i 140801` | ✅ | 成功 | -| 更新 Issue | `issue +update -i 140801 -t "新标题"` | ✅ | 成功 | -| 添加评论 | `issue +comment -i 140801 -b "评论"` | ✅ | 成功 | -| 关闭 Issue | `issue +close -i 140801` | ✅ | 修复后成功 | - -**通过率**: 5/5 (100%) - ---- - -### 场景 3: PR 全流程 - -| 功能 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 列出 PR | `pr +list` | ✅ | 成功 | -| 创建 PR | `pr +create --head branch --base master` | ❌ | 分支内容相同 | -| 查看 PR | `pr +view -i ` | ⏭️ | 无有效 PR 可测试 | -| 查看文件 | `pr +files -i ` | ⏭️ | 无有效 PR 可测试 | -| 查看 Diff | `pr +diff -i ` | ⏭️ | 无有效 PR 可测试 | -| 合并 PR | `pr +merge -i ` | ⏭️ | 无有效 PR 可测试 | -| 关闭 PR | `pr +close -i ` | ⏭️ | 无有效 PR 可测试 | - -**通过率**: 1/7 (14%) -**限制**: PR 创建需要分支有实际代码变更 - ---- - -### 场景 4: Release 发布流程 - -| 功能 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 创建 Release | `release +create -t "v0.1.0" -n "名称"` | ✅ | 成功 | -| 列出 Release | `release +list` | ✅ | 成功 | -| 查看 Release | `release +view -i 1752` | ✅ | 需要用 version_id | -| 删除 Release | `release +delete -i 1752` | ❌ | API 返回"版本不存在" | - -**通过率**: 3/4 (75%) -**发现**: release +view 需要使用 `version_id` 而非 `tag_name` - ---- - -### 场景 5: 搜索与发现 - -| 功能 | 命令 | 结果 | 备注 | -|------|------|------|------| -| 搜索仓库 | `search +repos -k "gitlink"` | ✅ | 成功 | -| 搜索用户 | `search +users -k "tiger"` | ✅ | 成功 | -| 列出组织 | `org +list` | ✅ | 成功 | -| 查看组织 | `org +info -i Gitlink` | ✅ | 成功 | -| 列出成员 | `org +members -i Gitlink` | ✅ | 成功 | -| 当前用户 | `user +me` | ✅ | 成功 | -| 用户信息 | `user +info --login wbtiger` | ✅ | 成功 | - -**通过率**: 7/7 (100%) - ---- - -## API 行为发现 - -### 1. Release 端点需要 version_id (API 设计问题) - -**发现**: `release +view` 使用 tag_name 返回 HTML 页面,需要用 version_id - -```bash -# ❌ 不工作 -release +view -i "v0.1.0-cli-test" # 返回 HTML - -# ✅ 工作 -release +view -i 1752 # 返回 JSON -``` - -**建议**: 更新 SKILL.md 文档说明需要使用 version_id - ---- - -### 2. Branch 列表返回 JSON 字符串 (格式化问题) - -**发现**: `branch +list` 返回的 data 是 JSON 字符串而非解析后的对象 - -```json -{ - "ok": true, - "data": "[{\"name\":\"master\",...}]" // ← 字符串,不是对象 -} -``` - -**影响**: 格式化输出时需要额外处理 - -**建议**: 在 client.go 中处理 JSON 字符串自动解析 - ---- - -### 3. Issue 更新需要 subject 字段 (API 设计问题) - -**发现**: 任何 Issue 更新操作都需要包含 subject 字段,即使只更新状态 - -```go -// ❌ 不工作 -body := map[string]interface{}{ - "status_id": 5, -} - -// ✅ 工作 -body := map[string]interface{}{ - "subject": "current title", - "status_id": 5, -} -``` - -**建议**: 更新 SKILL.md 文档说明必需字段 - ---- - -### 4. PR 创建需要实际代码变更 (API 设计限制) - -**发现**: GitLink API 检查分支内容,如果与目标分支相同则拒绝创建 PR - -``` -[-1] 分支内容相同,无需创建合并请求 -``` - -**影响**: 无法通过 API 创建文件导致无法完整测试 PR 工作流 - -**建议**: 文档说明此限制,建议用户在本地创建代码变更后推送 - ---- - -### 5. Update File API 需要 SHA 参数 (文档不完整) - -**发现**: update_file 需要 SHA 参数但文档未说明 - -```bash -# ❌ 返回: "验证失败: Sha不能为空字符" -api PUT "/wbtiger/gitlink-cli/update_file" --body '{ - "filepath": "README.md", - "content": "updated" -}' -``` - -**建议**: 联系 GitLink 团队补充文档或提供 SHA 获取方式 - ---- - -## 代码修改清单 - -### 修改的文件 - -1. **shortcuts/issue/issue.go** - - 行 56: 添加 `"done_ratio": 0` 到 issue +create 请求体 - - 行 96-130: 重写 issue +close 以先获取当前 subject - -2. **提交信息** - ``` - fix: adapt issue and release shortcuts to real GitLink API - - - issue +create: add done_ratio=0 to fix MySQL NOT NULL constraint - - issue +close: fetch current subject before updating to fix validation error - - release +view: works with version_id from list response - - release +delete: API returns 404 for non-existent releases - - branch +delete: API returns 'branch not found' error (needs investigation) - ``` - ---- - -## 建议与后续工作 - -### 立即行动 - -1. **联系 GitLink 团队** - - 确认 branch +delete 为何返回"分支不存在" - - 确认 release +delete 权限问题 - -2. **更新 Skills 文档** - - 在 gitlink-shared/SKILL.md 中记录 API 行为特殊性 - - 在各 Skill 中添加 done_ratio、subject 等必需字段说明 - -3. **完善 PR 测试** - - 创建带实际代码变更的测试分支 - - 完整测试 pr +view、pr +files、pr +diff、pr +merge - -### 中期改进 - -1. **客户端优化** - - 修复 branch +list 的 JSON 字符串解析问题 - - 为常见 API 错误添加更好的错误提示 - -2. **文档完善** - - 为每个 Shortcut 添加"必需字段"说明 - - 记录 API 特殊行为和限制 - -### 长期规划 - -1. **测试覆盖** - - 添加单元测试验证 API 适配 - - 建立 CI/CD 流程定期测试 API 兼容性 - -2. **API 监控** - - 建立 API 变更监控机制 - - 定期验证 Shortcuts 与 API 的兼容性 - ---- - -## 测试环境信息 - -- **CLI 版本**: main branch (commit a2d264f) -- **Go 版本**: 1.21+ -- **操作系统**: macOS 25.2.0 -- **测试账户**: wbtiger (admin=true) -- **测试仓库**: wbtiger/gitlink-cli -- **API 基础 URL**: https://www.gitlink.org.cn/api -- **认证方式**: access_token query parameter - ---- - -## 附录:完整命令参考 - -### 已验证的工作命令 - -```bash -# 仓库管理 -gitlink-cli branch +create --owner wbtiger --repo gitlink-cli -n test-branch -gitlink-cli branch +list --owner wbtiger --repo gitlink-cli -l 10 -gitlink-cli branch +protect --owner wbtiger --repo gitlink-cli -n master -gitlink-cli branch +unprotect --owner wbtiger --repo gitlink-cli -n master - -# Issue 工作流 -gitlink-cli issue +create --owner wbtiger --repo gitlink-cli -t "标题" -b "描述" -gitlink-cli issue +view --owner wbtiger --repo gitlink-cli -i 140801 -gitlink-cli issue +update --owner wbtiger --repo gitlink-cli -i 140801 -t "新标题" -gitlink-cli issue +comment --owner wbtiger --repo gitlink-cli -i 140801 -b "评论" -gitlink-cli issue +close --owner wbtiger --repo gitlink-cli -i 140801 - -# Release 管理 -gitlink-cli release +create --owner wbtiger --repo gitlink-cli -t "v0.1.0" -n "Release Name" -gitlink-cli release +list --owner wbtiger --repo gitlink-cli -gitlink-cli release +view --owner wbtiger --repo gitlink-cli -i 1752 - -# 搜索与发现 -gitlink-cli search +repos -k "gitlink" -gitlink-cli search +users -k "tiger" -gitlink-cli org +list -gitlink-cli org +info -i Gitlink -gitlink-cli org +members -i Gitlink -gitlink-cli user +me -gitlink-cli user +info --login wbtiger -``` - ---- - -**报告生成时间**: 2026-04-01 21:45 UTC -**报告作者**: Claude Code -**状态**: ✅ 完成 diff --git a/doc/apifox_tree.json b/doc/apifox_tree.json deleted file mode 100644 index 718f233..0000000 --- a/doc/apifox_tree.json +++ /dev/null @@ -1 +0,0 @@ -{"success":true,"data":[{"key":"apiDetailFolder.25301730","type":"apiDetailFolder","name":"附件","moduleId":1642891,"children":[{"key":"apiDetail.128323479","type":"apiDetail","name":"上传文件","moduleId":1642891,"children":[],"api":{"id":128323479,"name":"上传文件","moduleId":1642891,"type":"http","method":"post","path":"/api/attachments.json","folderId":25301730,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":25301730,"name":"附件","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.14578019","type":"apiDetailFolder","name":"许可证","moduleId":1642891,"children":[{"key":"apiDetail.72992902","type":"apiDetail","name":"许可证列表","moduleId":1642891,"children":[],"api":{"id":72992902,"name":"许可证列表","moduleId":1642891,"type":"http","method":"get","path":"/api/licenses.json","folderId":14578019,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":14578019,"name":"许可证","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.14578036","type":"apiDetailFolder","name":"忽略文件","moduleId":1642891,"children":[{"key":"apiDetail.72996734","type":"apiDetail","name":"忽略文件列表","moduleId":1642891,"children":[],"api":{"id":72996734,"name":"忽略文件列表","moduleId":1642891,"type":"http","method":"get","path":"/api/ignores.json","folderId":14578036,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":14578036,"name":"忽略文件","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.9663741","type":"apiDetailFolder","name":"用户","moduleId":1642891,"children":[{"key":"apiDetail.135349196","type":"apiDetail","name":"创建一个用户","moduleId":1642891,"children":[],"api":{"id":135349196,"name":"创建一个用户","moduleId":1642891,"type":"http","method":"post","path":"/api/accounts/register.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99494753","type":"apiDetail","name":"Public Keys列表","moduleId":1642891,"children":[],"api":{"id":99494753,"name":"Public Keys列表","moduleId":1642891,"type":"http","method":"get","path":"/api/public_keys.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99502322","type":"apiDetail","name":"Public Keys创建","moduleId":1642891,"children":[],"api":{"id":99502322,"name":"Public Keys创建","moduleId":1642891,"type":"http","method":"post","path":"/api/public_keys.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99503495","type":"apiDetail","name":"Public Keys删除","moduleId":1642891,"children":[],"api":{"id":99503495,"name":"Public Keys删除","moduleId":1642891,"type":"http","method":"delete","path":"/api/public_keys/{id}.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99506857","type":"apiDetail","name":"当前用户信息","moduleId":1642891,"children":[],"api":{"id":99506857,"name":"当前用户信息","moduleId":1642891,"type":"http","method":"get","path":"/api/users/get_user_info.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99657106","type":"apiDetail","name":"用户信息更改","moduleId":1642891,"children":[],"api":{"id":99657106,"name":"用户信息更改","moduleId":1642891,"type":"http","method":"put","path":"/api/users/{owner}.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99651561","type":"apiDetail","name":"用户项目列表","moduleId":1642891,"children":[],"api":{"id":99651561,"name":"用户项目列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/projects.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99652575","type":"apiDetail","name":"用户消息列表","moduleId":1642891,"children":[],"api":{"id":99652575,"name":"用户消息列表","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/messages.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99654400","type":"apiDetail","name":"用户阅读消息","moduleId":1642891,"children":[],"api":{"id":99654400,"name":"用户阅读消息","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/messages/read.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99655030","type":"apiDetail","name":"用户删除消息","moduleId":1642891,"children":[],"api":{"id":99655030,"name":"用户删除消息","moduleId":1642891,"type":"http","method":"delete","path":"/api/users/{owner}/messages.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99656095","type":"apiDetail","name":"用户消息创建","moduleId":1642891,"children":[],"api":{"id":99656095,"name":"用户消息创建","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/messages.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99661033","type":"apiDetail","name":"平台消息设置","moduleId":1642891,"children":[],"api":{"id":99661033,"name":"平台消息设置","moduleId":1642891,"type":"http","method":"get","path":"/api/template_message_settings.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99666761","type":"apiDetail","name":"用户消息设置列表","moduleId":1642891,"children":[],"api":{"id":99666761,"name":"用户消息设置列表","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/template_message_settings.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.99669647","type":"apiDetail","name":"用户消息设置更新","moduleId":1642891,"children":[],"api":{"id":99669647,"name":"用户消息设置更新","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/template_message_settings/update_setting.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100229455","type":"apiDetail","name":"用户星标项目列表","moduleId":1642891,"children":[],"api":{"id":100229455,"name":"用户星标项目列表","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/is_pinned_projects.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100234940","type":"apiDetail","name":"用户星标项目更新","moduleId":1642891,"children":[],"api":{"id":100234940,"name":"用户星标项目更新","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/is_pinned_projects/pin.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100236125","type":"apiDetail","name":"用户星标项目排序","moduleId":1642891,"children":[],"api":{"id":100236125,"name":"用户星标项目排序","moduleId":1642891,"type":"http","method":"put","path":"/api/users/{owner}/is_pinned_projects/{id}.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.48195728","type":"apiDetail","name":"新建一个反馈建议","moduleId":1642891,"children":[],"api":{"id":48195728,"name":"新建一个反馈建议","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/feedbacks.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100238414","type":"apiDetail","name":"用户近期活动统计","moduleId":1642891,"children":[],"api":{"id":100238414,"name":"用户近期活动统计","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/statistics/activity.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100239110","type":"apiDetail","name":"用户贡献度统计","moduleId":1642891,"children":[],"api":{"id":100239110,"name":"用户贡献度统计","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/headmaps.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100242043","type":"apiDetail","name":"用户开发能力","moduleId":1642891,"children":[],"api":{"id":100242043,"name":"用户开发能力","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/statistics/develop.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100245084","type":"apiDetail","name":"用户角色定位","moduleId":1642891,"children":[],"api":{"id":100245084,"name":"用户角色定位","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/statistics/role.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100790543","type":"apiDetail","name":"用户专业定位","moduleId":1642891,"children":[],"api":{"id":100790543,"name":"用户专业定位","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/statistics/major.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100793695","type":"apiDetail","name":"待办事项-接受项目","moduleId":1642891,"children":[],"api":{"id":100793695,"name":"待办事项-接受项目","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/applied_transfer_projects.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100794239","type":"apiDetail","name":"用户接受迁移","moduleId":1642891,"children":[],"api":{"id":100794239,"name":"用户接受迁移","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/applied_transfer_projects/{id}/accept.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100794866","type":"apiDetail","name":"用户拒绝迁移","moduleId":1642891,"children":[],"api":{"id":100794866,"name":"用户拒绝迁移","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/applied_transfer_projects/{id}/refuse.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796144","type":"apiDetail","name":"待办事项-项目申请","moduleId":1642891,"children":[],"api":{"id":100796144,"name":"待办事项-项目申请","moduleId":1642891,"type":"http","method":"get","path":"/api/users/{owner}/applied_projects.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796628","type":"apiDetail","name":"用户接受申请","moduleId":1642891,"children":[],"api":{"id":100796628,"name":"用户接受申请","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/applied_projects/{id}/accept.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796655","type":"apiDetail","name":"用户拒绝申请","moduleId":1642891,"children":[],"api":{"id":100796655,"name":"用户拒绝申请","moduleId":1642891,"type":"http","method":"post","path":"/api/users/{owner}/applied_projects/{id}/refuse.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796697","type":"apiDetail","name":"用户发送邮箱验证码","moduleId":1642891,"children":[],"api":{"id":100796697,"name":"用户发送邮箱验证码","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/send_email_vefify_code.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796833","type":"apiDetail","name":"用户验证邮箱验证码","moduleId":1642891,"children":[],"api":{"id":100796833,"name":"用户验证邮箱验证码","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/check_email_verify_code.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796884","type":"apiDetail","name":"用户验证密码","moduleId":1642891,"children":[],"api":{"id":100796884,"name":"用户验证密码","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/check_password.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796903","type":"apiDetail","name":"用户验证邮箱","moduleId":1642891,"children":[],"api":{"id":100796903,"name":"用户验证邮箱","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/check_email.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100796995","type":"apiDetail","name":"用户更改邮箱","moduleId":1642891,"children":[],"api":{"id":100796995,"name":"用户更改邮箱","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/update_email.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.133361275","type":"apiDetail","name":"用户更改手机号","moduleId":1642891,"children":[],"api":{"id":133361275,"name":"用户更改手机号","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/yystopf/update_phone.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.133365633","type":"apiDetail","name":"用户更改密码","moduleId":1642891,"children":[],"api":{"id":133365633,"name":"用户更改密码","moduleId":1642891,"type":"http","method":"post","path":"/api/accounts/change_password.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.218476052","type":"apiDetail","name":"用户注销检测","moduleId":1642891,"children":[],"api":{"id":218476052,"name":"用户注销检测","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/check_user_can_delete.json","folderId":9663741,"tags":[],"status":"released","responsibleId":504802,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.218481003","type":"apiDetail","name":"用户注销","moduleId":1642891,"children":[],"api":{"id":218481003,"name":"用户注销","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}.json","folderId":9663741,"tags":[],"status":"released","responsibleId":504802,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.344856559","type":"apiDetail","name":"用户验证密码 Copy","moduleId":1642891,"children":[],"api":{"id":344856559,"name":"用户验证密码 Copy","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/check_password.json","folderId":9663741,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":422272}}],"folder":{"id":9663741,"name":"用户","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.25655317","type":"apiDetailFolder","name":"组织","moduleId":1642891,"children":[{"key":"apiDetail.130180455","type":"apiDetail","name":"组织团队下新增所有的项目","moduleId":1642891,"children":[],"api":{"id":130180455,"name":"组织团队下新增所有的项目","moduleId":1642891,"type":"http","method":"post","path":"/api/organizations/{organization}/teams/{id}/team_projects/create_all.json","folderId":25655317,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130180856","type":"apiDetail","name":"组织团队下删除所有的项目","moduleId":1642891,"children":[],"api":{"id":130180856,"name":"组织团队下删除所有的项目","moduleId":1642891,"type":"http","method":"delete","path":"/api/organizations/{organization}/teams/{id}/team_projects/destroy_all.json","folderId":25655317,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.133370352","type":"apiDetail","name":"获取所有组织列表","moduleId":1642891,"children":[],"api":{"id":133370352,"name":"获取所有组织列表","moduleId":1642891,"type":"http","method":"get","path":"/api/organizations.json","folderId":25655317,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":25655317,"name":"组织","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.14528264","type":"apiDetailFolder","name":"项目","moduleId":1642891,"children":[{"key":"apiDetail.135085780","type":"apiDetail","name":"关注一个项目","moduleId":1642891,"children":[],"api":{"id":135085780,"name":"关注一个项目","moduleId":1642891,"type":"http","method":"post","path":"/api/watchers/follow.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135213776","type":"apiDetail","name":"取消关注一个项目","moduleId":1642891,"children":[],"api":{"id":135213776,"name":"取消关注一个项目","moduleId":1642891,"type":"http","method":"delete","path":"/api/watchers/unfollow.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135218720","type":"apiDetail","name":"点赞一个项目","moduleId":1642891,"children":[],"api":{"id":135218720,"name":"点赞一个项目","moduleId":1642891,"type":"http","method":"post","path":"/api/projects/{id}/praise_tread/like.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135218981","type":"apiDetail","name":"取消点赞一个项目","moduleId":1642891,"children":[],"api":{"id":135218981,"name":"取消点赞一个项目","moduleId":1642891,"type":"http","method":"delete","path":"/api/projects/{id}/praise_tread/unlike.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118617843","type":"apiDetail","name":"项目邀请链接生成","moduleId":1642891,"children":[],"api":{"id":118617843,"name":"项目邀请链接生成","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/project_invite_links/current_link.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118620134","type":"apiDetail","name":"获取邀请链接信息","moduleId":1642891,"children":[],"api":{"id":118620134,"name":"获取邀请链接信息","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/project_invite_links/show_link.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118621824","type":"apiDetail","name":"通过链接接受邀请","moduleId":1642891,"children":[],"api":{"id":118621824,"name":"通过链接接受邀请","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/project_invite_links/redirect_link.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.100795659","type":"apiDetail","name":"加入项目","moduleId":1642891,"children":[],"api":{"id":100795659,"name":"加入项目","moduleId":1642891,"type":"http","method":"post","path":"/api/applied_projects.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118628234","type":"apiDetail","name":"退出项目","moduleId":1642891,"children":[],"api":{"id":118628234,"name":"退出项目","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/quit.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102299292","type":"apiDetail","name":"项目列表","moduleId":1642891,"children":[],"api":{"id":102299292,"name":"项目列表","moduleId":1642891,"type":"http","method":"get","path":"/api/projects.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102300076","type":"apiDetail","name":"推荐项目列表","moduleId":1642891,"children":[],"api":{"id":102300076,"name":"推荐项目列表","moduleId":1642891,"type":"http","method":"get","path":"/api/projects/recommend.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118625342","type":"apiDetail","name":"fork项目","moduleId":1642891,"children":[],"api":{"id":118625342,"name":"fork项目","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/forks.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118622267","type":"apiDetail","name":"创建项目","moduleId":1642891,"children":[],"api":{"id":118622267,"name":"创建项目","moduleId":1642891,"type":"http","method":"post","path":"/api/projects.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118622714","type":"apiDetail","name":"创建镜像项目","moduleId":1642891,"children":[],"api":{"id":118622714,"name":"创建镜像项目","moduleId":1642891,"type":"http","method":"post","path":"/api/projects/migrate.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118625242","type":"apiDetail","name":"同步镜像","moduleId":1642891,"children":[],"api":{"id":118625242,"name":"同步镜像","moduleId":1642891,"type":"http","method":"post","path":"/api/repositories/{id}/sync_mirror.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749621","type":"apiDetail","name":"更新项目(基础信息)","moduleId":1642891,"children":[],"api":{"id":118749621,"name":"更新项目(基础信息)","moduleId":1642891,"type":"http","method":"patch","path":"/api/{owner}/{repo}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118878629","type":"apiDetail","name":"更新项目","moduleId":1642891,"children":[],"api":{"id":118878629,"name":"更新项目","moduleId":1642891,"type":"http","method":"patch","path":"/api/{owner}/{repo}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118888326","type":"apiDetail","name":"删除项目","moduleId":1642891,"children":[],"api":{"id":118888326,"name":"删除项目","moduleId":1642891,"type":"http","method":"delete","path":"/api/{owner}/{repo}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102303730","type":"apiDetail","name":"项目主页","moduleId":1642891,"children":[],"api":{"id":102303730,"name":"项目主页","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/about.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102303158","type":"apiDetail","name":"项目导航列表","moduleId":1642891,"children":[],"api":{"id":102303158,"name":"项目导航列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/menu_list.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749609","type":"apiDetail","name":"获取所有的项目搜索标签","moduleId":1642891,"children":[],"api":{"id":118749609,"name":"获取所有的项目搜索标签","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/project_topics.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749610","type":"apiDetail","name":"为项目创建一个搜索标签","moduleId":1642891,"children":[],"api":{"id":118749610,"name":"为项目创建一个搜索标签","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/project_topics.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749611","type":"apiDetail","name":"删除项目一个搜索标签","moduleId":1642891,"children":[],"api":{"id":118749611,"name":"删除项目一个搜索标签","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/project_topics/{id}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118628941","type":"apiDetail","name":"项目详情","moduleId":1642891,"children":[],"api":{"id":118628941,"name":"项目详情","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/detail.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118629943","type":"apiDetail","name":"项目详情(简版)","moduleId":1642891,"children":[],"api":{"id":118629943,"name":"项目详情(简版)","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/simple.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.156931163","type":"apiDetail","name":"项目设置-项目详情","moduleId":1642891,"children":[],"api":{"id":156931163,"name":"项目设置-项目详情","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/edit.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102304019","type":"apiDetail","name":"项目设置-项目导航","moduleId":1642891,"children":[],"api":{"id":102304019,"name":"项目设置-项目导航","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/project_units.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.102304885","type":"apiDetail","name":"项目设置-更改项目导航","moduleId":1642891,"children":[],"api":{"id":102304885,"name":"项目设置-更改项目导航","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/project_units.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749612","type":"apiDetail","name":"获取项目贡献者代码行数","moduleId":1642891,"children":[],"api":{"id":118749612,"name":"获取项目贡献者代码行数","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/code_stats.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118625561","type":"apiDetail","name":"转移项目-管理的组织列表","moduleId":1642891,"children":[],"api":{"id":118625561,"name":"转移项目-管理的组织列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/applied_transfer_projects/organizations.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118626901","type":"apiDetail","name":"转移项目","moduleId":1642891,"children":[],"api":{"id":118626901,"name":"转移项目","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/applied_transfer_projects.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118626969","type":"apiDetail","name":"取消转移项目","moduleId":1642891,"children":[],"api":{"id":118626969,"name":"取消转移项目","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/applied_transfer_projects/cancel.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749613","type":"apiDetail","name":"获取项目贡献者列表(代码行)","moduleId":1642891,"children":[],"api":{"id":118749613,"name":"获取项目贡献者列表(代码行)","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/contributors/stat.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118757944","type":"apiDetail","name":"获取项目贡献者列表","moduleId":1642891,"children":[],"api":{"id":118757944,"name":"获取项目贡献者列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/contributors.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118761139","type":"apiDetail","name":"获取项目开发语言","moduleId":1642891,"children":[],"api":{"id":118761139,"name":"获取项目开发语言","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/languages.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749614","type":"apiDetail","name":"获取项目分支列表","moduleId":1642891,"children":[],"api":{"id":118749614,"name":"获取项目分支列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/branches.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749615","type":"apiDetail","name":"获取项目分支列表(无分页)","moduleId":1642891,"children":[],"api":{"id":118749615,"name":"获取项目分支列表(无分页)","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/branches/all.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749616","type":"apiDetail","name":"创建一个项目分支","moduleId":1642891,"children":[],"api":{"id":118749616,"name":"创建一个项目分支","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/branches.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749617","type":"apiDetail","name":"删除一个项目分支","moduleId":1642891,"children":[],"api":{"id":118749617,"name":"删除一个项目分支","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/branches/{branch}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749618","type":"apiDetail","name":"更新项目默认分支","moduleId":1642891,"children":[],"api":{"id":118749618,"name":"更新项目默认分支","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/{repo}/branches/update_default_branch.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.136389222","type":"apiDetail","name":"恢复一个项目分支","moduleId":1642891,"children":[],"api":{"id":136389222,"name":"恢复一个项目分支","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/branches/restore.json","folderId":14528264,"tags":[],"status":"developing","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749619","type":"apiDetail","name":"获取项目标签列表","moduleId":1642891,"children":[],"api":{"id":118749619,"name":"获取项目标签列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/tags.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130666922","type":"apiDetail","name":"获取所有标签列表(无分页)","moduleId":1642891,"children":[],"api":{"id":130666922,"name":"获取所有标签列表(无分页)","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/tags.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.131097758","type":"apiDetail","name":"获取一个项目标签","moduleId":1642891,"children":[],"api":{"id":131097758,"name":"获取一个项目标签","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/tags/{name}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.118749620","type":"apiDetail","name":"删除一个项目标签","moduleId":1642891,"children":[],"api":{"id":118749620,"name":"删除一个项目标签","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/tags/{tag}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128585960","type":"apiDetail","name":"添加一个项目成员","moduleId":1642891,"children":[],"api":{"id":128585960,"name":"添加一个项目成员","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/collaborators.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128608887","type":"apiDetail","name":"删除一个项目成员","moduleId":1642891,"children":[],"api":{"id":128608887,"name":"删除一个项目成员","moduleId":1642891,"type":"http","method":"delete","path":"/api/{owner}/{repo}/collaborators/remove.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128612430","type":"apiDetail","name":"更改项目成员权限","moduleId":1642891,"children":[],"api":{"id":128612430,"name":"更改项目成员权限","moduleId":1642891,"type":"http","method":"put","path":"/api/{owner}/{repo}/collaborators/change_role.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128615675","type":"apiDetail","name":"项目成员列表","moduleId":1642891,"children":[],"api":{"id":128615675,"name":"项目成员列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/collaborators.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128623246","type":"apiDetail","name":"获取项目所有文件","moduleId":1642891,"children":[],"api":{"id":128623246,"name":"获取项目所有文件","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/files.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128689170","type":"apiDetail","name":"提交文件到项目","moduleId":1642891,"children":[],"api":{"id":128689170,"name":"提交文件到项目","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/contents/batch.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128698154","type":"apiDetail","name":"获取项目代码目录","moduleId":1642891,"children":[],"api":{"id":128698154,"name":"获取项目代码目录","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/entries.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128768679","type":"apiDetail","name":"获取项目代码子目录或者文件","moduleId":1642891,"children":[],"api":{"id":128768679,"name":"获取项目代码子目录或者文件","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/sub_entries.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128776531","type":"apiDetail","name":"获取项目README文件","moduleId":1642891,"children":[],"api":{"id":128776531,"name":"获取项目README文件","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/readme.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128780673","type":"apiDetail","name":"获取文件树列表","moduleId":1642891,"children":[],"api":{"id":128780673,"name":"获取文件树列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/git/trees/{sha}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128929110","type":"apiDetail","name":"获取项目blobs内容","moduleId":1642891,"children":[],"api":{"id":128929110,"name":"获取项目blobs内容","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/git/blobs/{sha}.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128967623","type":"apiDetail","name":"获取项目提交列表","moduleId":1642891,"children":[],"api":{"id":128967623,"name":"获取项目提交列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/commits.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.231168484","type":"apiDetail","name":"获取单个提交的变更文件列表","moduleId":1642891,"children":[],"api":{"id":231168484,"name":"获取单个提交的变更文件列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/commits/{sha}/files.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128979946","type":"apiDetail","name":"获取单个提交的diff信息","moduleId":1642891,"children":[],"api":{"id":128979946,"name":"获取单个提交的diff信息","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/commits/{sha}/diff.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129294464","type":"apiDetail","name":"获取单个文件的blame信息","moduleId":1642891,"children":[],"api":{"id":129294464,"name":"获取单个文件的blame信息","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/blame.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129303418","type":"apiDetail","name":"获取比较提交的diff信息","moduleId":1642891,"children":[],"api":{"id":129303418,"name":"获取比较提交的diff信息","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/compare.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135453155","type":"apiDetail","name":"创建一个文件","moduleId":1642891,"children":[],"api":{"id":135453155,"name":"创建一个文件","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/create_file.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135504395","type":"apiDetail","name":"删除一个文件","moduleId":1642891,"children":[],"api":{"id":135504395,"name":"删除一个文件","moduleId":1642891,"type":"http","method":"delete","path":"/api/{owner}/{repo}/delete_file.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135533527","type":"apiDetail","name":"更新一个文件","moduleId":1642891,"children":[],"api":{"id":135533527,"name":"更新一个文件","moduleId":1642891,"type":"http","method":"put","path":"/api/{owner}/{repo}/update_file.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.145299524","type":"apiDetail","name":"替换一个文件","moduleId":1642891,"children":[],"api":{"id":145299524,"name":"替换一个文件","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/replace_file.json","folderId":14528264,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.230529620","type":"apiDetail","name":"获取项目关注列表","moduleId":1642891,"children":[],"api":{"id":230529620,"name":"获取项目关注列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/watchers.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.230540802","type":"apiDetail","name":"获取项目点赞列表","moduleId":1642891,"children":[],"api":{"id":230540802,"name":"获取项目点赞列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/stargazers.json","folderId":14528264,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":14528264,"name":"项目","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.15155941","type":"apiDetailFolder","name":"疑修","moduleId":1642891,"children":[{"key":"apiDetail.76027786","type":"apiDetail","name":"疑修状态列表","moduleId":1642891,"children":[],"api":{"id":76027786,"name":"疑修状态列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issue_statues.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027785","type":"apiDetail","name":"疑修发布人列表","moduleId":1642891,"children":[],"api":{"id":76027785,"name":"疑修发布人列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issue_authors.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027787","type":"apiDetail","name":"疑修负责人列表","moduleId":1642891,"children":[],"api":{"id":76027787,"name":"疑修负责人列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issue_assigners.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027784","type":"apiDetail","name":"里程碑列表","moduleId":1642891,"children":[],"api":{"id":76027784,"name":"里程碑列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/milestones.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027783","type":"apiDetail","name":"获取一个里程碑以及疑修(合并请求TODO)","moduleId":1642891,"children":[],"api":{"id":76027783,"name":"获取一个里程碑以及疑修(合并请求TODO)","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/milestones/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027789","type":"apiDetail","name":"更新一个里程碑","moduleId":1642891,"children":[],"api":{"id":76027789,"name":"更新一个里程碑","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/{repo}/milestones/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027790","type":"apiDetail","name":"创建一个里程碑","moduleId":1642891,"children":[],"api":{"id":76027790,"name":"创建一个里程碑","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/milestones.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027791","type":"apiDetail","name":"删除一个里程碑","moduleId":1642891,"children":[],"api":{"id":76027791,"name":"删除一个里程碑","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/milestones/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.154165018","type":"apiDetail","name":"更新一个里程碑状态","moduleId":1642891,"children":[],"api":{"id":154165018,"name":"更新一个里程碑状态","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/milestones/{id}/update_status.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027792","type":"apiDetail","name":"疑修优先级列表","moduleId":1642891,"children":[],"api":{"id":76027792,"name":"疑修优先级列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issue_priorities.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027793","type":"apiDetail","name":"项目标记列表","moduleId":1642891,"children":[],"api":{"id":76027793,"name":"项目标记列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issue_tags.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027794","type":"apiDetail","name":"创建一个项目标记","moduleId":1642891,"children":[],"api":{"id":76027794,"name":"创建一个项目标记","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/issue_tags.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027795","type":"apiDetail","name":"更新一个项目标记","moduleId":1642891,"children":[],"api":{"id":76027795,"name":"更新一个项目标记","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/{repo}/issue_tags/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027796","type":"apiDetail","name":"删除一个项目标记","moduleId":1642891,"children":[],"api":{"id":76027796,"name":"删除一个项目标记","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/issue_tags/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027797","type":"apiDetail","name":"疑修列表","moduleId":1642891,"children":[],"api":{"id":76027797,"name":"疑修列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issues.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027798","type":"apiDetail","name":"获取一个疑修","moduleId":1642891,"children":[],"api":{"id":76027798,"name":"获取一个疑修","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issues/{index}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76022555","type":"apiDetail","name":"创建一个疑修","moduleId":1642891,"children":[],"api":{"id":76022555,"name":"创建一个疑修","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/issues.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027799","type":"apiDetail","name":"更新一个疑修和状态","moduleId":1642891,"children":[],"api":{"id":76027799,"name":"更新一个疑修和状态","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/{repo}/issues/{index}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027803","type":"apiDetail","name":"批量更新疑修","moduleId":1642891,"children":[],"api":{"id":76027803,"name":"批量更新疑修","moduleId":1642891,"type":"http","method":"patch","path":"/api/v1/{owner}/{repo}/issues/batch_update.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027800","type":"apiDetail","name":"删除一个疑修","moduleId":1642891,"children":[],"api":{"id":76027800,"name":"删除一个疑修","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/issues/{index}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027801","type":"apiDetail","name":"批量删除疑修","moduleId":1642891,"children":[],"api":{"id":76027801,"name":"批量删除疑修","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/issues/batch_destroy.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027802","type":"apiDetail","name":"项目所有成员列表","moduleId":1642891,"children":[],"api":{"id":76027802,"name":"项目所有成员列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/collaborators.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027804","type":"apiDetail","name":"获取疑修下评论或操作记录列表","moduleId":1642891,"children":[],"api":{"id":76027804,"name":"获取疑修下评论或操作记录列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issues/{index}/journals.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027806","type":"apiDetail","name":"创建一个疑修的评论","moduleId":1642891,"children":[],"api":{"id":76027806,"name":"创建一个疑修的评论","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/issues/{index}/journals.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027805","type":"apiDetail","name":"修改疑修评论的内容","moduleId":1642891,"children":[],"api":{"id":76027805,"name":"修改疑修评论的内容","moduleId":1642891,"type":"http","method":"patch","path":"api/v1/{owner}/{repo}/issues/{index}/journals/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027807","type":"apiDetail","name":"删除一个疑修评论","moduleId":1642891,"children":[],"api":{"id":76027807,"name":"删除一个疑修评论","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/issues/{index}/journals/{id}.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.76027808","type":"apiDetail","name":"获取疑修评论的子评论列表","moduleId":1642891,"children":[],"api":{"id":76027808,"name":"获取疑修评论的子评论列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issues/{index}/journals/{id}/children_journals.json","folderId":15155941,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":15155941,"name":"疑修","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.25510310","type":"apiDetailFolder","name":"合并请求","moduleId":1642891,"children":[{"key":"apiDetail.129418678","type":"apiDetail","name":"获取合并请求列表","moduleId":1642891,"children":[],"api":{"id":129418678,"name":"获取合并请求列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129436611","type":"apiDetail","name":"获取一个合并请求","moduleId":1642891,"children":[],"api":{"id":129436611,"name":"获取一个合并请求","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.313673207","type":"apiDetail","name":"重新打开一个合并请求","moduleId":1642891,"children":[],"api":{"id":313673207,"name":"重新打开一个合并请求","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/pulls/{index}/reopen.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.129444672","type":"apiDetail","name":"创建一个合并请求","moduleId":1642891,"children":[],"api":{"id":129444672,"name":"创建一个合并请求","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/pulls.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135604255","type":"apiDetail","name":"更新一个合并请求","moduleId":1642891,"children":[],"api":{"id":135604255,"name":"更新一个合并请求","moduleId":1642891,"type":"http","method":"put","path":"/api/{owner}/{repo}/pulls/{index}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.135713919","type":"apiDetail","name":"拒绝一个合并请求","moduleId":1642891,"children":[],"api":{"id":135713919,"name":"拒绝一个合并请求","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/pulls/{index}/refuse_merge.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.136280213","type":"apiDetail","name":"通过一个合并请求","moduleId":1642891,"children":[],"api":{"id":136280213,"name":"通过一个合并请求","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/pulls/{index}/pr_merge.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129460938","type":"apiDetail","name":"获取一个合并请求变更文件列表","moduleId":1642891,"children":[],"api":{"id":129460938,"name":"获取一个合并请求变更文件列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/pulls/{id}/files.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.231145682","type":"apiDetail","name":"获取一个合并请求变更文件列表(简版)","moduleId":1642891,"children":[],"api":{"id":231145682,"name":"获取一个合并请求变更文件列表(简版)","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}/files.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129464825","type":"apiDetail","name":"获取一个合并请求提交列表","moduleId":1642891,"children":[],"api":{"id":129464825,"name":"获取一个合并请求提交列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/pulls/{id}/commits.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129466945","type":"apiDetail","name":"获取两个分支、标签、提交标识之间的比较内容","moduleId":1642891,"children":[],"api":{"id":129466945,"name":"获取两个分支、标签、提交标识之间的比较内容","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/compare/{head}...{base}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.231229754","type":"apiDetail","name":"获取两个分支、标签、提交标识之间的变更文件列表","moduleId":1642891,"children":[],"api":{"id":231229754,"name":"获取两个分支、标签、提交标识之间的变更文件列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/compare/{head}...{base}/files.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129484736","type":"apiDetail","name":"获取合并请求版本列表","moduleId":1642891,"children":[],"api":{"id":129484736,"name":"获取合并请求版本列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}/versions.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129491125","type":"apiDetail","name":"获取合并请求版本之间的Diff","moduleId":1642891,"children":[],"api":{"id":129491125,"name":"获取合并请求版本之间的Diff","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}/versions/{version_id}/diff.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129497448","type":"apiDetail","name":"获取合并请求审查列表","moduleId":1642891,"children":[],"api":{"id":129497448,"name":"获取合并请求审查列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}/reviews.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130132340","type":"apiDetail","name":"创建一个合并请求审查","moduleId":1642891,"children":[],"api":{"id":130132340,"name":"创建一个合并请求审查","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/pulls/{index}/reviews.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130149780","type":"apiDetail","name":"获取合并请求审查评论列表","moduleId":1642891,"children":[],"api":{"id":130149780,"name":"获取合并请求审查评论列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pulls/{index}/journals.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130161707","type":"apiDetail","name":"创建一个合并请求审查评论","moduleId":1642891,"children":[],"api":{"id":130161707,"name":"创建一个合并请求审查评论","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/pulls/{index}/journals.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130171580","type":"apiDetail","name":"修改一个合并请求审查评论","moduleId":1642891,"children":[],"api":{"id":130171580,"name":"修改一个合并请求审查评论","moduleId":1642891,"type":"http","method":"put","path":"/api/v1/{owner}/{repo}/pulls/{index}/journals/{id}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.130173917","type":"apiDetail","name":"删除一个合并请求审查评论","moduleId":1642891,"children":[],"api":{"id":130173917,"name":"删除一个合并请求审查评论","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/pulls/{index}/journals/{id}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.156280785","type":"apiDetail","name":"创建一个合并请求评论","moduleId":1642891,"children":[],"api":{"id":156280785,"name":"创建一个合并请求评论","moduleId":1642891,"type":"http","method":"post","path":"/api/issues/{id}/journals.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.156283981","type":"apiDetail","name":"删除一个合并请求评论","moduleId":1642891,"children":[],"api":{"id":156283981,"name":"删除一个合并请求评论","moduleId":1642891,"type":"http","method":"delete","path":"/api/issues/{issue_id}/journals/{id}.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.309968941","type":"apiDetail","name":"获取一个合并请求评论列表","moduleId":1642891,"children":[],"api":{"id":309968941,"name":"获取一个合并请求评论列表","moduleId":1642891,"type":"http","method":"get","path":"/api/issues/{id}/journals.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.435239286","type":"apiDetail","name":"获取合并请求下评论或操作记录列表 ","moduleId":1642891,"children":[],"api":{"id":435239286,"name":"获取合并请求下评论或操作记录列表 ","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/issues/{index}/journals.json","folderId":25510310,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}}],"folder":{"id":25510310,"name":"合并请求","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.25301080","type":"apiDetailFolder","name":"发行版","moduleId":1642891,"children":[{"key":"apiDetail.128319361","type":"apiDetail","name":"创建发行版","moduleId":1642891,"children":[],"api":{"id":128319361,"name":"创建发行版","moduleId":1642891,"type":"http","method":"post","path":"/api/{owner}/{repo}/releases.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128329951","type":"apiDetail","name":"编辑发行版","moduleId":1642891,"children":[],"api":{"id":128329951,"name":"编辑发行版","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/releases/{id}/edit.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128325148","type":"apiDetail","name":"更新发行版","moduleId":1642891,"children":[],"api":{"id":128325148,"name":"更新发行版","moduleId":1642891,"type":"http","method":"put","path":"/api/{owner}/{repo}/releases/{id}.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128326903","type":"apiDetail","name":"删除发行版","moduleId":1642891,"children":[],"api":{"id":128326903,"name":"删除发行版","moduleId":1642891,"type":"http","method":"delete","path":"/api/{owner}/{repo}/releases/{id}.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.128787455","type":"apiDetail","name":"查看发行版","moduleId":1642891,"children":[],"api":{"id":128787455,"name":"查看发行版","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/releases/{id}.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129608182","type":"apiDetail","name":"获取发行版列表","moduleId":1642891,"children":[],"api":{"id":129608182,"name":"获取发行版列表","moduleId":1642891,"type":"http","method":"get","path":"/api/{owner}/{repo}/releases.json","folderId":25301080,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":25301080,"name":"发行版","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.31583114","type":"apiDetailFolder","name":"数据集","moduleId":1642891,"children":[{"key":"apiDetail.161012723","type":"apiDetail","name":"创建数据集","moduleId":1642891,"children":[],"api":{"id":161012723,"name":"创建数据集","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/dataset","folderId":31583114,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.161024492","type":"apiDetail","name":"更新数据集","moduleId":1642891,"children":[],"api":{"id":161024492,"name":"更新数据集","moduleId":1642891,"type":"http","method":"put","path":"/api/v1/{owner}/{repo}/dataset","folderId":31583114,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.161047972","type":"apiDetail","name":"数据集详情+列表","moduleId":1642891,"children":[],"api":{"id":161047972,"name":"数据集详情+列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/dataset","folderId":31583114,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.164229419","type":"apiDetail","name":"查询数据集列表","moduleId":1642891,"children":[],"api":{"id":164229419,"name":"查询数据集列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/project_datasets.json","folderId":31583114,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.181265049","type":"apiDetail","name":"删除数据集附件","moduleId":1642891,"children":[],"api":{"id":181265049,"name":"删除数据集附件","moduleId":1642891,"type":"http","method":"delete","path":"/api/attachments/{uuid}.json","folderId":31583114,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":31583114,"name":"数据集","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.25493020","type":"apiDetailFolder","name":"WebHook","moduleId":1642891,"children":[{"key":"apiDetail.72760922","type":"apiDetail","name":"Webhook列表","moduleId":1642891,"children":[],"api":{"id":72760922,"name":"Webhook列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/webhooks.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.72768906","type":"apiDetail","name":"Webhook创建","moduleId":1642891,"children":[],"api":{"id":72768906,"name":"Webhook创建","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/webhooks.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.72899285","type":"apiDetail","name":"Webhook删除","moduleId":1642891,"children":[],"api":{"id":72899285,"name":"Webhook删除","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/webhooks/{id}.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.74298240","type":"apiDetail","name":"Webhook详情","moduleId":1642891,"children":[],"api":{"id":74298240,"name":"Webhook详情","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/webhooks/{id}.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129324655","type":"apiDetail","name":"Webhook更新","moduleId":1642891,"children":[],"api":{"id":129324655,"name":"Webhook更新","moduleId":1642891,"type":"http","method":"put","path":"/api/v1/{owner}/{repo}/webhooks/{id}.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129342632","type":"apiDetail","name":"Webhook历史推送列表","moduleId":1642891,"children":[],"api":{"id":129342632,"name":"Webhook历史推送列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/webhooks/{id}/hooktasks.json","folderId":25493020,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.129344672","type":"apiDetail","name":"Webhook测试推送","moduleId":1642891,"children":[],"api":{"id":129344672,"name":"Webhook测试推送","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/webhooks/{id}/tests.json","folderId":25493020,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":25493020,"name":"WebHook","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.14528544","type":"apiDetailFolder","name":"Oauth2","moduleId":1642891,"children":[{"key":"apiDetail.72764213","type":"apiDetail","name":"用户登录(用户名密码)","moduleId":1642891,"children":[],"api":{"id":72764213,"name":"用户登录(用户名密码)","moduleId":1642891,"type":"http","method":"post","path":"/oauth/token","folderId":14528544,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.72935925","type":"apiDetail","name":"用户登录(客户端模式)","moduleId":1642891,"children":[],"api":{"id":72935925,"name":"用户登录(客户端模式)","moduleId":1642891,"type":"http","method":"post","path":"/oauth/token","folderId":14528544,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.161029381","type":"apiDetail","name":"刷新token","moduleId":1642891,"children":[],"api":{"id":161029381,"name":"刷新token","moduleId":1642891,"type":"http","method":"post","path":"/oauth/token","folderId":14528544,"tags":[],"status":"released","responsibleId":422272,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":14528544,"name":"Oauth2","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.80133441","type":"apiDetailFolder","name":"登录","moduleId":1642891,"children":[{"key":"doc.8309184","type":"doc","name":"登陆状态请求说明","moduleId":1642891,"children":[],"doc":{"id":8309184,"name":"登陆状态请求说明","moduleId":1642891,"folderId":80133441,"tags":[],"visibility":"INHERITED","editorId":504802,"sidebarTitle":""}}],"folder":{"id":80133441,"name":"登录","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":{},"visibility":"INHERITED","editorId":504802,"type":"http"}},{"key":"apiDetailFolder.26976066","type":"apiDetailFolder","name":"Wiki","moduleId":1642891,"children":[{"key":"apiDetailFolder.26978269","type":"apiDetailFolder","name":"wiki功能接口","moduleId":1642891,"children":[{"key":"apiDetail.137005912","type":"apiDetail","name":"createWiki","moduleId":1642891,"children":[],"api":{"id":137005912,"name":"createWiki","moduleId":1642891,"type":"http","method":"post","path":"/api/wiki/createWiki","folderId":26978269,"tags":["wiki-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.137005913","type":"apiDetail","name":"deleteWiki","moduleId":1642891,"children":[],"api":{"id":137005913,"name":"deleteWiki","moduleId":1642891,"type":"http","method":"delete","path":"/api/wiki/deleteWiki","folderId":26978269,"tags":["wiki-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.137005914","type":"apiDetail","name":"getWiki","moduleId":1642891,"children":[],"api":{"id":137005914,"name":"getWiki","moduleId":1642891,"type":"http","method":"get","path":"/api/wiki/getWiki","folderId":26978269,"tags":["wiki-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.137005915","type":"apiDetail","name":"updateWiki","moduleId":1642891,"children":[],"api":{"id":137005915,"name":"updateWiki","moduleId":1642891,"type":"http","method":"put","path":"/api/wiki/updateWiki","folderId":26978269,"tags":["wiki-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.137005916","type":"apiDetail","name":"wikiPages","moduleId":1642891,"children":[],"api":{"id":137005916,"name":"wikiPages","moduleId":1642891,"type":"http","method":"get","path":"/api/wiki/wikiPages","folderId":26978269,"tags":["wiki-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":26978269,"name":"wiki功能接口","moduleId":1642891,"docId":0,"parentId":26976066,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":1499089,"type":"http"}},{"key":"apiDetailFolder.26978270","type":"apiDetailFolder","name":"wiki导入导出接口","moduleId":1642891,"children":[{"key":"apiDetail.137005917","type":"apiDetail","name":"上传文件","moduleId":1642891,"children":[],"api":{"id":137005917,"name":"上传文件","moduleId":1642891,"type":"http","method":"post","path":"/api/wikiExport/uploadWiki/{owner}/{repoName}/{projectId}","folderId":26978270,"tags":["wiki-export-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.137005918","type":"apiDetail","name":"导出Wiki-wrapper","moduleId":1642891,"children":[],"api":{"id":137005918,"name":"导出Wiki-wrapper","moduleId":1642891,"type":"http","method":"get","path":"/api/wikiExport/wikiExport-wrapper","folderId":26978270,"tags":["wiki-export-controller"],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":26978270,"name":"wiki导入导出接口","moduleId":1642891,"docId":0,"parentId":26976066,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":1499089,"type":"http"}}],"folder":{"id":26976066,"name":"Wiki","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":null,"visibility":"INHERITED","editorId":422272,"type":"http"}},{"key":"apiDetailFolder.67723133","type":"apiDetailFolder","name":"流水线","moduleId":1642891,"children":[{"key":"apiDetail.356773628","type":"apiDetail","name":"流水线列表","moduleId":1642891,"children":[],"api":{"id":356773628,"name":"流水线列表","moduleId":1642891,"type":"http","method":"get","path":"/api/pm/pipelines.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773629","type":"apiDetail","name":"运行流水线","moduleId":1642891,"children":[],"api":{"id":356773629,"name":"运行流水线","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/actions/runs.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773630","type":"apiDetail","name":"流水线执行记录列表","moduleId":1642891,"children":[],"api":{"id":356773630,"name":"流水线执行记录列表","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/actions/runs.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773631","type":"apiDetail","name":"图形化流水线保存","moduleId":1642891,"children":[],"api":{"id":356773631,"name":"图形化流水线保存","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/pipelines/save_yaml","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773632","type":"apiDetail","name":"删除流水线","moduleId":1642891,"children":[],"api":{"id":356773632,"name":"删除流水线","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/{owner}/{repo}/pipelines/{id}.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773633","type":"apiDetail","name":"查看流水线详情","moduleId":1642891,"children":[],"api":{"id":356773633,"name":"查看流水线详情","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pipelines/{id}.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773634","type":"apiDetail","name":"禁用流水线","moduleId":1642891,"children":[],"api":{"id":356773634,"name":"禁用流水线","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/actions/disable.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773635","type":"apiDetail","name":"启用流水线","moduleId":1642891,"children":[],"api":{"id":356773635,"name":"启用流水线","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/actions/enable.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773636","type":"apiDetail","name":"查询流水线运行日志","moduleId":1642891,"children":[],"api":{"id":356773636,"name":"查询流水线运行日志","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/{owner}/{repo}/actions/runs/{run_id}/jobs/0","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}},{"key":"apiDetail.356773637","type":"apiDetail","name":"获取流水线执行报告结果","moduleId":1642891,"children":[],"api":{"id":356773637,"name":"获取流水线执行报告结果","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/pipelines/run_results.json","folderId":67723133,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":504802}}],"folder":{"id":67723133,"name":"流水线","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":{},"visibility":"INHERITED","editorId":504802,"type":"http"}},{"key":"apiDetailFolder.81427229","type":"apiDetailFolder","name":"模板","moduleId":1642891,"children":[{"key":"apiDetail.434332280","type":"apiDetail","name":"模板列表接口","moduleId":1642891,"children":[],"api":{"id":434332280,"name":"模板列表接口","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/yystopf/ceshi/project_templates","folderId":81427229,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.434332281","type":"apiDetail","name":"创建模板","moduleId":1642891,"children":[],"api":{"id":434332281,"name":"创建模板","moduleId":1642891,"type":"http","method":"post","path":"/api/v1/yystopf/ceshi/project_templates","folderId":81427229,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.434332283","type":"apiDetail","name":"删除模板","moduleId":1642891,"children":[],"api":{"id":434332283,"name":"删除模板","moduleId":1642891,"type":"http","method":"delete","path":"/api/v1/yystopf/ceshi/project_templates/5","folderId":81427229,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.434332282","type":"apiDetail","name":"更新模板","moduleId":1642891,"children":[],"api":{"id":434332282,"name":"更新模板","moduleId":1642891,"type":"http","method":"put","path":"/api/v1/yystopf/ceshi/project_templates/5","folderId":81427229,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}},{"key":"apiDetail.434332284","type":"apiDetail","name":"模板详情接口 ","moduleId":1642891,"children":[],"api":{"id":434332284,"name":"模板详情接口 ","moduleId":1642891,"type":"http","method":"get","path":"/api/v1/{owner}/{repo}/project_templates/{id}","folderId":81427229,"tags":[],"status":"released","responsibleId":0,"customApiFields":{},"visibility":"INHERITED","editorId":422272}}],"folder":{"id":81427229,"name":"模板","moduleId":1642891,"docId":0,"parentId":0,"projectBranchId":0,"shareSettings":{},"visibility":"INHERITED","editorId":422272,"type":"http"}}]} \ No newline at end of file