onefetch 是一个在终端里打印仓库概览的工具,主程序 11991552 字节。它读一遍 git 历史,把语言占比、提交数、贡献者与体积列成一屏,22 行输出里 11 个字段,左边配一张用字符画的语言 logo。
它解决的问题是「接手一个仓库先要知道它是什么」。翻 README 可能过时,依赖文件只看得到一部分,跑一遍 onefetch 就用 11 个字段把语言与活跃度摊开了。
这次在一个 29 个提交的测试仓库里跑了三轮,量了耗时与输出字节,并逐项核对了屏幕上那 11 个字段分别来自哪里。
解压只有一个 exe
官方包是 tar.gz 格式,5622927 字节,解开只有 1 个条目:onefetch.exe。Windows 上用 tar 或者 7z 都能解,实测 0.71 秒。
| 项目 | 字节 | 说明 |
|---|---|---|
| tar.gz 整体 | 5622927 | Windows 专用包 |
| onefetch.exe | 11991552 | 单文件,无依赖 |
| 解压条目 | 1 个 | 没有配置模板 |
| 解压耗时 | 0.71 秒 | SSD 上单次 |
它不写配置文件
11991552 字节里带了几十种语言的 logo,解压后不需要额外的主题目录。想换配色和布局只能靠命令行参数,它不读用户目录里的设置。
跑一次 674 毫秒
在一个 29 个提交的仓库里连跑三次是 674 / 699 / 711 毫秒,输出 2066 字节、22 行。时间主要花在读 git 历史和解析提交上,跟仓库文件多少关系更大。
| 轮次 | 耗时 | 输出 |
|---|---|---|
| 第 1 次 | 674 毫秒 | 2066 字节 |
| 第 2 次 | 699 毫秒 | 2066 字节 |
| 第 3 次 | 711 毫秒 | 2066 字节 |
| 行数 | 22 行 | 含 11 个字段 |
屏幕上 11 项分别是什么
截图那次右边固定十一行,每行一个字段,左边是语言 logo 的字符画。字段值全部来自 git,不是文件扫描。

| 字段 | 实测值 | 来源 |
|---|---|---|
| HEAD | e2d5f12 (master) | 当前提交短哈希与分支名 |
| Pending | 1+- 2+ | 已改与新增的文件数 |
| Created | 15 hours ago | 首个提交时间 |
| Language | Python (100.0 %) | 按代码行数算占比 |
| Author | 100% Tester 29 | 贡献者占比与提交数 |
| Commits | 29 | 提交总数 |
Pending 那行是工作区状态
1+- 2+ 表示 1 个文件有改动、2 个新文件。这一项统计的是工作区,跟 git status 短格式对得上,扫一眼就知道提交前还剩什么。
只统计已提交的文件
屏幕下方写着 Size 823 B(1 file)与 Lines of code 2。仓库里确实只有一个已提交文件,另外两个新文件还停在未跟踪状态,没进这两个数字。这解释了为什么体积看着偏小。
语言占比怎么算
Language 那行给的是按代码行数统计的百分比,这次是 Python 100.0%。百分比前面有个彩色圆点,颜色取自该语言的代表色,右侧还有一排色块表示各语言占比。
| 项 | 实测 | 说明 |
|---|---|---|
| 识别语言 | 1 种 | Python |
| 占比 | 100.0 % | 按代码行数 |
| 色块 | 8 个 | 多语言时按比例排开 |
| logo | 字符画 | 用 = 和 - 拼出语言标志 |
语言判断靠扩展名
它按文件扩展名归类,不解析语法。一个 .py 文件里写满 SQL 也只算 Python,混编项目看这行要打折。
字符画是它最大的体积来源
11991552 字节里有几十种语言的 logo 字符画。不带 logo 跑能少一半输出,参数里有关掉 ASCII art 的开关。
装之前先确认三件事
解压即用,但它必须待在 git 仓库里才有输出。离开仓库直接报错,这点跟多数命令行工具不一样。
| 项 | 本次实测 | 说明 |
|---|---|---|
| 系统 | Windows 10 22H2(19045.6466) | 官方 Windows 包 |
| 依赖 | git 2.55.0.windows.3 | 屏幕右上会印版本 |
| 授权 | MIT | 可商用,可再分发 |
| 终端 | cmd.exe 开虚终端 | 否则字符画是乱码 |
它自己调 git 命令
屏幕右上那行 git version 2.55.0.windows.3 是它读到的系统 git 版本。机器上没装 git 就跑不起来,装了但不在 PATH 里也会失败。
终端不支持虚终端时全是方括号
cmd 里直接跑,输出会是一串 ←[38;5 开头的字符,字符画根本拼不出来。这个现象是控制台没开转义序列解析,换个终端就好。
三个真会踩的地方
不在仓库里直接报错
在普通目录里跑会提示找不到仓库并退出。想统计某个子目录,得先进到那个仓库里,或者用参数指定路径。
浅克隆的数字全是错的
仓库是 --depth 1 克隆来的话,Commits 显示 1,Created 显示克隆那一刻。这两个字段直接失真,别拿它判断仓库年龄。
Pending 只反映工作区
1+- 2+ 这类数字来自工作区与索引的差异,已 stash 的内容不算在里面。看它判断「能不能干净提交」会漏掉 stash。
什么场景值得上
接手陌生仓库、或者在几个候选库之间挑一个来读源码时最合适。674 毫秒出一屏,语言占比和提交数直接告诉你这是个什么规模的项目。
反过来,天天在熟悉的仓库里干活的人用不上。分支名和提交数 git status 已经给了,多装 11991552 字节只是换个排版。
| 项目 | 数值 |
|---|---|
| exe 字节 | 11991552 |
| tar.gz 字节 | 5622927 |
| 跑一次 | 674 到 711 毫秒 |
| 屏幕输出 | 2066 字节 / 22 行 |
| 字段数 | 11 项 |







