在 GitHub / Gitee 仓库页面补上平台没有直接给出来的信息:仓库创建时间、最后一次 push、项目年龄、活跃度、体积。
写它是因为经常要判断一个仓库还值不值得用。页面上只能看到「3 周前更新」这种相对时间,而「更新」把开 Issue、改简介都算进去了,跟代码进展是两回事。想看真实情况得开 F12 翻 API,翻烦了,干脆写个脚本贴在页面上。
(界面截图以后补在这儿,先把功能写明白)
仓库首页右侧 About / 简介 区域会多出一张卡片:
| 条目 | 说明 |
|---|---|
| 创建时间 | 仓库建立时间 |
| 最后推送 | 代码最后一次 git push,对应接口的 pushed_at |
| 最后更新 | 仓库信息最后一次变更,对应 updated_at |
| 项目年龄 | 从创建到现在 |
| 代码活跃度 | 按最后一次 push 判断:活跃 / 较活跃 / 一般 / 冷淡 / 沉寂 |
| 仓库大小 | 自动换算 KB / MB / GB。Gitee 接口不保证返回体积,拿不到就不显示这一行 |
悬停每一项能看到完整时间戳和字段说明。
pushed_at)只有推代码才会变。updated_at)范围大得多:Issue、PR、Release、Wiki、改仓库简介都会刷新它。所以「最后更新」比「最后推送」新,说明最近有人开 Issue 或发版本,但没推代码。看代码进度用「最后推送」,看仓库动静用「最后更新」。
Gitee 的 OpenAPI 不接受匿名请求(直接 404),必须带私人令牌,所以用 Gitee 前配一次:
Gitee 右上角头像 → 设置 → 左侧 私人令牌 → 生成新令牌
权限只勾 projects 就够了,填个描述提交
令牌只显示一次,马上复制
打开任意 Gitee 页面,F12 控制台执行:
localStorage.setItem('repoMeta:giteeToken', '这里粘贴令牌')
刷新页面
令牌存在你自己浏览器的 localStorage 里,只在请求 gitee.com/api/v5 时作为参数带上。想删掉:
localStorage.removeItem('repoMeta:giteeToken')
GitHub 未登录 API 限额每小时 60 次,脚本有 6 小时缓存,正常逛够用。不够的话:
localStorage.setItem('repoMeta:ghToken', 'ghp_你的令牌')
只给公开仓库的读权限就行。
默认关。开启后任何仓库页面(包括 Issues、PR)都会有一块可以拖的浮动面板。
开关在信息卡右上角 ⚙ 里。
| 操作 | 效果 |
|---|---|
| 拖标题栏 | 移动位置,会记住 |
| − | 收起 / 展开 |
| × | 三种关闭:只关这一次(刷新恢复)、24 小时不再显示、彻底关掉 |
| ⚙ | 悬浮面板总开关 |
菜单点面板以外的位置会自己收起。关掉以后想再开,三个办法任选:
repoMetaSettings({ float: true })控制台执行 repoMetaDoctor(),会把当前页面解析结果、卡片状态、设置内容全打出来。提 Issue 时附上它的输出。
几个常见情况:
github.com/用户名/仓库名),脚本已启用只发两类请求:
https://api.github.com/repos/{owner}/{repo}https://gitee.com/api/v5/repos/{owner}/{repo}不加载任何第三方资源,不收集、不上传浏览记录,不向其他服务器发送数据。查询结果按仓库缓存在本地 localStorage 中,有效期 6 小时。
信息卡没有出现?
确认打开的是仓库首页(地址形如 github.com/用户名/仓库名),并且脚本已在 Tampermonkey 中启用。也可以在控制台执行 repoMetaDoctor(),它会输出当前页面的解析结果、卡片状态和设置内容。
Gitee 上显示「获取失败」?
通常是还没有配置私人令牌,按上文「Gitee 需要配置访问令牌」操作一次即可。
GitHub 上显示「限流」?
未登录状态下 API 每小时 60 次。等待一段时间,或者配置 GitHub 令牌。
时间看起来不对?
时间是按浏览器本地时区显示的。悬停可以看到原始时间戳。
为什么有些仓库没有「仓库大小」这一行?
体积来自平台的仓库接口,而两个平台对这项数据的支持程度不同:
size(单位 KB),因此 GitHub 仓库一定能显示。对于拿不到体积的仓库,脚本会直接隐藏「仓库大小」这一行,而不是显示一个占位符。这不是脚本故障,也不影响其它条目。
想确认某个 Gitee 仓库到底有没有这项数据,可以在仓库页按 F12 执行:
fetch('https://gitee.com/api/v5/repos/{owner}/{repo}?access_token=' +
encodeURIComponent(localStorage.getItem('repoMeta:giteeToken')))
.then(r => r.json())
.then(d => console.log(Object.keys(d), 'size =', d.size))
若输出中没有 size 字段,说明该平台未提供,无法通过脚本补全(需要遍历文件树累加统计,请求量过大,未采用)。