gitingest 在 Jupyter Notebook 中如何调用 ingest_async 提取代码库?
【免费下载链接】gitingestReplace 'hub' with 'ingest' in any GitHub URL to get a prompt-friendly extract of a codebase项目地址: https://gitcode.com/GitHub_Trending/gi/gitingest
如果你需要在 Jupyter Notebook 里把一个 Git 仓库或本地目录转成适合 LLM 消费的文本摘要(而不是走命令行),gitingest 的 Python 包提供了异步入口ingest_async:传入仓库 URL 或本地目录路径,运行后得到summary(仓库统计摘要)、tree(目录结构)、content(各文件内容)三个字符串。使用前提是 Python 3.8+ 环境(README「Requirements」一节),并通过pip安装了 gitingest 包。
准备条件:在 Notebook 环境中安装并确认 gitingest
在 Notebook 对应 kernel 能访问的 Python 环境中安装:
pip install gitingest文档给出的验证方式(来自 llms.txt「Installation Verification」)是在 shell 中执行:
python -c "from gitingest import ingest; print('GitIngest installed successfully')"如果在 Notebook 内验证,直接确认导入成功即可:
from gitingest import ingest_async导入不报错,说明当前 kernel 的 Python 环境里 gitingest 已可用。
在 Notebook 单元格中直接 await ingest_async
gitingest 包同时导出ingest(同步封装)和ingest_async(异步实现),两者见 入口文件。README「Jupyter notebook usage」给出的调用方式是在单元格中直接await:
from gitingest import ingest_async # Use await directly in Jupyter summary, tree, content = await ingest_async("path/to/directory")README 的解释是:Jupyter notebooks are asynchronous by default,所以单元格内可以直接await,不需要像普通脚本那样包一层asyncio.run。作为对照,README「Python package usage」展示普通脚本里的异步用法是:
from gitingest import ingest_async import asyncio result = asyncio.run(ingest_async("path/to/directory"))source参数既可以是本地目录路径,也可以是仓库 URL,包括指向子目录的 URL 形式:
summary, tree, content = await ingest_async("https://github.com/coderamp-labs/gitingest") summary, tree, content = await ingest_async("https://github.com/coderamp-labs/gitingest/tree/main/src/gitingest/utils")返回值与结果验证
ingest_async返回(summary, tree, content)元组,三者都是字符串:
summary:仓库或目录的统计信息(仓库名、文件数、token 估算);tree:树状的目录结构文本;content:各文件的文本内容,按文件分段。
文档给出的输出结构示例(来自 llms.txt 的 Usage Example,以下为文档示例,不代表你本地一定得到相同数值):
Repository: octocat/hello-world Files analyzed: 1 Estimated tokens: 29Directory structure: └── octocat-hello-world/ └── README================================================ FILE: README ================================================ Hello World!在 Notebook 里验证时,运行单元格后确认三个变量均为字符串即可;需要完整文本时,文档示例的做法是把三段拼起来:
full_context = f"{summary}\n\n{tree}\n\n{content}"注意 README 说明:Python 包调用默认不会把结果写到文件,只有显式传output参数才写文件(见下节)。
常用参数:私有仓库、分支、过滤与输出
以下参数均定义在 entrypoint.py 的函数签名与 docstring 中,Notebook 单元格里以关键字参数传入:
summary, tree, content = await ingest_async( "https://github.com/username/private-repo", token="github_pat_...", # 私有仓库的 PAT;也可以改用 GITHUB_TOKEN 环境变量 branch="main", # 克隆并分析的分支(默认用仓库默认分支) tag=None, # 指定 tag;tag 与 branch 同时给出时 tag 生效 include_patterns="*.py", # 只包含匹配的文件 exclude_patterns="*.log", # 排除匹配的文件 max_file_size=10 * 1024 * 1024, # 单个文件最大大小,超过则被忽略(默认 10 MB) include_submodules=False, # 是否递归包含 Git 子模块 include_gitignored=False, # 是否包含 .gitignore/.gitingestignore 忽略的文件 output=None, # 结果写文件的路径;"-" 表示写 stdout;None 表示不写文件 )几个在 Notebook 场景下值得注意的点:
私有仓库:除
token参数外,也可以先设置环境变量再调用(README 示例):import os os.environ["GITHUB_TOKEN"] = "github_pat_..." summary, tree, content = await ingest_async("https://github.com/username/private-repo")output的三种取值:None不写文件(Notebook 内最常用);"-"写到 stdout;其他路径则把tree和content拼接后写入该文件,见 _write_output。远程仓库的临时克隆:
source是 URL 时,gitingest 会先克隆仓库、处理完成后删除临时目录(见 _clone_repo_if_remote);本地目录则直接读取,不产生克隆。默认过滤:不传
include_gitignored=True时,.gitignore与.gitingestignore列出的文件会被跳过。
可选分支:并行提取多个仓库
llms.txt 的 Python Integration Patterns 中把ingest_async用于批量场景,示例如下(其中的process_repo_data、analyze_repository等辅助函数是示例代码,需自行实现):
async def batch_analyze_repos(repo_urls: list): tasks = [ingest_async(url) for url in repo_urls] results = await asyncio.gather(*tasks) return [process_repo_data(*result) for result in results]如果 Notebook 单元格需要跑多个仓库,可以用同样的方式await asyncio.gather(*tasks)拿到每个仓库的(summary, tree, content)。
使用边界
- 文档中的 Jupyter 示例是
await ingest_async(...)直接写在单元格顶部语句;这是 README 明确给出的用法("Use await directly in Jupyter")。 - 超过
max_file_size(默认 10 MB)的文件会被忽略,不是报错。 - 文档没有为 Jupyter 场景额外提供成功判定日志,验证以返回的三个字符串是否符合预期结构为准(可对照上文文档示例输出)。
【免费下载链接】gitingestReplace 'hub' with 'ingest' in any GitHub URL to get a prompt-friendly extract of a codebase项目地址: https://gitcode.com/GitHub_Trending/gi/gitingest
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考