运行了几个项目,效果如下
不同颜色代表不同时期的代码,可以看到项目是否频繁重构。
注意本篇非严肃性技术文章,仓库作者的项目(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