适用于以下场景:(1)用户提供 GitHub 仓库 URL 或本地仓库路径,并请求将其转换为其他格式;(2)用户请求导出 GitHub 仓库……
Core Phition
功能概述
Core Phition是一项面向实际任务的技能,主要用于此技能将 GitHub 寄存器的内容和元数据转换为目标格式( Markdown 文档、 JSON 元数据、 CSV 表格、 文件夹树 JSON );它保存了结构 和 c。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
使用与执行
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
核心定位
本能力将 GitHub 仓库内容与元数据 转换为目标格式(Markdown 文档、JSON 元数据、CSV 表格、目录树 JSON)。它在不同格式间保持结构完整性与内容保真度——并非简单的文件复制,而是一种语义化转换,严格遵循 GitHub 的数据模型(仓库、树、提交、Issues、PRs、Releases)。
关键职责:
- 使用 GitHub API 或本地
.git目录解析 GitHub 仓库结构(分支、目录树、文件) - 将仓库数据模型(Issues、PRs、Releases、Contributors)转换为对应目标格式的表示形式
- 在格式转换过程中保留文件内容与编码(UTF-8、二进制检测)
- 提供转换清单(文件数量、类型分布、大小汇总)
运行模式
/convert-github-repository --markdown
仓库 → Markdown 文档。 将整个仓库转换为一组 Markdown 文件:
- 从仓库根目录提取
README.md - 每个目录生成子目录,并在其内创建
README.md描述其内容 - Issues 导出为
issues/YYYY-MM-DD-{number}-{title}.md - PRs 导出为
pull-requests/YYYY-MM-DD-{number}-{title}.md - Releases 导出为
releases/v{semver}.md - 代码文件以原始语言保留,并添加语法高亮代码块围栏
/convert-github-repository --json
仓库 → JSON 元数据。 将仓库结构与内容导出为一个 JSON 文件:
{
"repo": { "name": "...", "description": "...", "stars": N, "license": "...", "topics": [...] },
"files": [{ "path": "...", "size": N, "type": "file|dir", "sha": "..." }],
"branches": [{ "name": "...", "last_commit": "..." }],
"contributors": [{ "login": "...", "contributions": N }]
}
/convert-github-repository --csv
Issues + PRs → CSV。 将 Issues 和 Pull Requests 导出为 CSV 行,列名包括:number, title, state, author, created_at, updated_at, labels, assignees, milestone, body_preview。
/convert-github-repository --tree
仓库 → 目录树 JSON。 输出一个表示仓库布局的树状结构:
{
"path": "/",
"type": "directory",
"children": [
{ "path": "src/index.js", "type": "file", "size": 1234, "language": "JavaScript" },
{ "path": "tests/", "type": "directory", "children": [...] }
]
}
/convert-github-repository --readme-to-json
README.md → 结构化 JSON。 解析 README.md 并提取:标题(首个 H1)、描述(标题后首个段落)、安装步骤、使用示例、贡献指南、许可证信息。
执行步骤
- 识别仓库来源
远程 GitHub 仓库: 解析 URL 提取 owner 和 repo:
https://github.com/owner/repo -> {owner: "owner", repo: "repo"}
使用环境变量中的 GITHUB_TOKEN(os.getenv("GITHUB_TOKEN"))调用 GitHub API。
本地仓库: 验证 .git 目录是否存在。使用 git CLI 提取以下信息:
git ls-files获取文件列表git log --oneline获取最近提交记录git remote get-url origin确认仓库身份
若无法识别任一来源,则报告:“无法识别仓库来源 —— 请提供 GitHub URL(如 https://github.com/owner/repo)或包含 .git 目录的本地路径。”
- 获取仓库元数据
对于远程仓库,调用 GitHub API:
GET https://api.github.com/repos/{owner}/{repo}
Authorization: Bearer {GITHUB_TOKEN}
Accept: application/vnd.github+json
响应中包含:full_name、description、stargazers_count、forks_count、license.spdx_id、topics、default_branch、created_at、updated_at、homepage、language。
若缺失 Token 或遭遇限流(HTTP 403),尝试无认证请求(限流更低),或报告:“GitHub API 不可用 —— 请检查 GITHUB_TOKEN 或稍后重试(无认证请求限流:60 次/小时)。”
- 获取仓库内容
获取默认分支树:
GET https://api.github.com/repos/{owner}/{repo}/git/trees/{default_branch}?recursive=1
返回所有文件的扁平化列表,含 path、type(blob/tree)、size、sha 字段。
对于本地仓库: 运行 git ls-tree -r --name-only {branch} 获取文件列表,再通过 git show {sha}:{path} 读取文件内容。
过滤常见非必要路径:
node_modules/、.git/、vendor/—— 默认跳过,除非显式指定--include-ignored- 二进制文件(图片、PDF、编译产物)—— 在清单中列出,但不包含内容
.gitignore中声明但未提交的文件 —— 跳过
- 转换为目标格式
--markdown 转换:
README.md:原样保留,并更新相对链接指向本地文件- 代码文件:依据扩展名映射添加语法高亮代码块围栏(```language):
.js→```javascript、.py→```python、.go→```go、.rs→```rust等
- 目录:为每个目录创建
README.md,列出其包含的文件 - Issues:每个 Issue 转换为
{number}-{slug}.md,含 frontmatter:--- number: 42 state: open author: username created: 2024-01-15 labels: [bug, help-wanted] --- # Title body text...
- PRs:格式同 Issues,额外增加
merged字段及审查评论
--json 转换:
- 从扁平文件列表构建嵌套结构(按目录路径分组)
- 对文本文件包含内容(若大于 1MB 则 Base64 编码)
- 对大型仓库(>10K 文件),采用流式输出避免内存耗尽
--csv 转换:
- 表头:
number,title,state,author,created_at,updated_at,labels,assignees,milestone,body_preview - Labels:用
;分隔符连接 - Assignees:用
;分隔符连接 - Body preview:取前 200 字符,去除 Markdown 格式
- 字段中含逗号时需加双引号;内部双引号转义为
""
--tree 转换:
- 构建递归树结构
- 依据扩展名检测语言(
.js→ JavaScript、.py→ Python 等) - 报告总文件数、目录数、各类型大小分布
--readme-to-json 转换:
- 使用正则表达式或简易状态机解析 Markdown:
- 首个
# Heading→title - 标题之间的段落 → 各节(
installation、usage、contributing等) - 代码块 →
code_examples数组 - 表格 → 解析为对象数组
- 链接
[text](url)→ 收集至links数组
- 首个
- 验证输出
交付前执行以下校验:
- 若格式为 JSON:使用
json.loads()解析并确认无错误 - 若格式为 CSV:验证所有行具有相同列数
- 若格式为 Markdown:验证所有文件可被正确读取为 UTF-8
- 检查是否静默跳过文件 —— 报告跳过与成功转换的文件数量对比
- 附带清单交付
返回转换结果及清单:
{
"format": "markdown",
"files_converted": 142,
"files_skipped": 3,
"skipped_reasons": [
{"path": "node_modules/package/index.js", "reason": "binary or non-text, excluded by default"},
{"path": ".git/config", "reason": "contains sensitive data"}
],
"total_size_bytes": 2048576,
"output_path": "./{repo-name}-converted/"
}
强制规则
禁止行为
- 禁止硬编码 GitHub Token —— 必须使用
os.getenv("GITHUB_TOKEN") - 禁止将二进制文件(图片、PDF、编译产物)作为文本转换 —— 应依据扩展名或大小(>5MB)进行检测
- 禁止转换
.gitignore中列出的文件,除非用户显式指定--include-ignored - 禁止静默跳过文件 —— 所有跳过操作必须在清单的
skipped_reasons中明确记录 - 禁止输出格式校验失败的内容(非法 JSON、不可解析 CSV)
- 禁止在未认证情况下转换私有仓库 —— 必须先验证未返回 HTTP 401 再继续执行
必须行为
- 始终生成含
files_converted、files_skipped、skipped_reasons的清单 - 保留文件编码 —— 以二进制方式读取,按 UTF-8 解码,无效字节替换为
uFFFD - 准确报告文件数量与大小,确保透明性
- 获取 Issues/PRs 时使用分页(GitHub API 默认每页 30 或 100 条)
- 处理本地仓库时,必须使用
gitCLI —— 不得假定可直接访问原始文件系统 - 默认过滤常见非代码目录(
node_modules、.git、pycache、build/、dist/)
质量标准
| 评估项 | 最低要求 | 理想目标 |
|---|---|---|
| 内容保全 | 100% 文本文件内容完整保留 | 二进制文件仅在清单中列出,不丢失内容 |
| 格式有效性 | 输出能通过对应格式解析器 | 严格执行 Schema 校验(JSON:draft-7;CSV:列结构一致) |
| 清单完整性 | 每个跳过文件均注明原因 | 每个已转换文件均列出其大小与类型 |
| 编码正确性 | 所有文本文件使用 UTF-8 编码 | 无效字节统一替换为 U+FFFD,而非丢弃或乱码 |
| 限流处理 | HTTP 403 触发重新认证尝试 | 主动分页 + 403 时刷新 Token |
| 大型仓库处理 | 10K 文件以内仓库内存占用 < 500MB | JSON 流式输出、文件分块写入 |
高质量输出应满足:通过目标格式解析器无报错、语义内容完全保留、且附带完整清单说明转换内容及跳过原因。
优质示例 vs 劣质示例
| 场景 | 劣质实现 | 优质实现 |
|---|---|---|
| 缺失 Token | 无限重试无认证请求 | 报告“GitHub API 认证必需 —— 请设置 GITHUB_TOKEN 环境变量” |
| 二进制文件 | 尝试以文本读取,导致内容损坏 | 跳过该二进制文件,并在清单中记录:{"path": "logo.png", "reason": "binary/image, excluded"} |
| 大型仓库 | 将全部文件载入内存,最终崩溃 | 采用流式处理,报告“已处理 8,432 / 12,000 个文件(70%)” |
| 遭遇限流 | 三次请求后静默失败 | 报告“超出速率限制(HTTP 403)—— 请于 14:32 UTC 后重试,或设置 GITHUB_TOKEN” |
| 字段缺失 | 字段不存在时直接跳过(如 homepage) |
显式包含 "homepage": null —— 不静默丢弃任何字段 |
| 格式错误 | 输出含尾随逗号的非法 JSON | 使用 json.dumps() 校验,报告“输出非法:第 847 行出现意外 token” |
| 本地仓库路径 | 假定 ~/repo 路径存在 |
检查 .git 目录,报告“路径不是 Git 仓库:./myrepo” |
热门AI工具
相关专题
github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。
7965
2026.01.21
要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
2281
2024.04.09
git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
2517
2024.04.09
Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。
714
2023.07.24
git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。
1260
2023.07.06
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
热门下载
相关下载

