惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
WordPress大学
WordPress大学
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
I
InfoQ
小众软件
小众软件
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
美团技术团队
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
MongoDB | Blog
MongoDB | Blog
V
V2EX
J
Java Code Geeks
有赞技术团队
有赞技术团队
博客园 - 聂微东
B
Blog RSS Feed
博客园 - 司徒正美

东东's Blog

Memos: MacOS 下编译安装 Aseprite 脚本 日本关西系列|Day 2 京都的半日闲逛 美国Apple官网购买礼品卡订阅 ChatGPT Plus 北京・中关村森林公园(2026) 日本关西系列|Day 1 抵达临空城与大阪首日 Memos: 查询 Apple ID 注册时间 Memos: Ghostty 开箱即用配置 烹饪日记:香煎罗非鱼 Memos: 新时代程序员的顶级焦虑 Memos: 博客新增图文布局和轮播图效果支持 Memos: 最适合空气炸锅烤着吃的红薯品类 Memos: 记录「95分」好吃的‘小帅香菇面’ 妻子爷爷的‘朝鲜军功奖章’ Memos: 博客切换为 Shiki 代码高亮方案 Memos: 博客新增划线、重点及荧光笔效果支持 记录博客字体分包与字体子集化 Memos: 邻座吃饭的一家三口 人在囧途之哈囧 哈尔滨・乡村的冬季 查看香烟生产日期 哈尔滨・东北虎林园 Memos: 来自日本的 ndjp 提供免费的三级子域名 Memos: 刚听说 autojump, 真的好用 Memos: 体验 OpenCode + Superpowers + GPT 5.2 开发需求 Memos: 杰我睿爆雷 GoReleaser 自动发布 Go 镜像到 DockerHub & GitHub Release 初识 Volta & Corepack 前端版本管理工具 部署 Beszel 把 “小鸡们” 归拢起来 Memos: Claude Code in Action 中文版教程 2025 年度回顾
代码考古:用 gitcharts 挖掘 Git 仓库的演变轨迹
2026-03-16 · via 东东's Blog

运行了几个项目,效果如下

gitcharts 01 gitcharts 02 gitcharts 03 gitcharts 04

不同颜色代表不同时期的代码,可以看到项目是否频繁重构。

注意本篇非严肃性技术文章,仓库作者的项目(koaning/gitcharts)可能会随时有破坏性改动,当前的脚本也仅适用于在本地项目根目录中执行,如遇报错建议使用 AI 进行评估和校正。

安装 koaning/gitcharts

$ mkdir -p ~/Portable/gitcharts && cd ~/Portable/gitcharts

$ git clone https://github.com/koaning/gitcharts.git gitcharts-viewer

创建一个便捷脚本并添加到 PATH

$ mkdir -p ~/Portable/bin

$ cat > ~/Portable/bin/git-archaeology <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
uv run --python 3 "$HOME/Portable/gitcharts/gitcharts-viewer/git_archaeology.py" "$@"
EOF

$ chmod +x ~/Portable/bin/git-archaeology


# 加到 Path
$ echo 'export PATH="$HOME/Portable/bin:$PATH"' >> ~/.zshrc

$ source ~/.zshrc

之后就可以使用

$ git-archaeology --repo . --samples 80 --file-extensions .md,.js,.mjs,.py,.html,.css,.rst,.go --version-source none

当然这仍然比较麻烦,运行后像查看数据、清理仓库中的临时文件和产出

再创建一个脚本

$ cat > ~/Portable/bin/gitcharts-add <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

repo_name="${1:-$(basename "$PWD")}"
viewer_dir="$HOME/Portable/gitcharts/gitcharts-viewer"
viewer_charts="$viewer_dir/charts"

git-archaeology \
  --repo . \
  --samples 80 \
  --file-extensions .md,.js,.mjs,.py,.html,.css,.rst,.go \
  --version-source none

mkdir -p "$viewer_charts"
cp charts/.-clean.json "$viewer_charts/${repo_name}-clean.json"

if [ -f charts/.-versioned.json ]; then
  cp charts/.-versioned.json "$viewer_charts/${repo_name}-versioned.json"
fi

cd "$viewer_dir"
uv run --python 3 --with jsonschema generate_repos_list.py

cd "$OLDPWD"
rm -rf .downloads charts git-research
EOF

添加为可执行文件

chmod +x ~/Portable/bin/gitcharts-add

之后,在Git 项目根目录下运行 gitcharts-add 命令即可自动生成和清理

# 执行
$ gitcharts-add

# 或者可以执行
$ gitcharts-add my-repo

每次运行,生成的数据 JSON 被同步到了以下目录

~/Portable/gitcharts/gitcharts-viewer/charts

查看图表

cd ~/Portable/gitcharts/gitcharts-viewer

uv run --python 3 -m http.server 8100

浏览器访问:http://127.0.0.1:8100