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 整体5622927Windows 专用包
onefetch.exe11991552单文件,无依赖
解压条目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,不是文件扫描。

onefetch 3.1.0 在 29 个提交的测试仓库里:左侧字符画 logo,右侧 11 个字段含 HEAD、Pending、Commits 与语言占比
字段实测值来源
HEADe2d5f12 (master)当前提交短哈希与分支名
Pending1+- 2+已改与新增的文件数
Created15 hours ago首个提交时间
LanguagePython (100.0 %)按代码行数算占比
Author100% Tester 29贡献者占比与提交数
Commits29提交总数

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 项