我使用 GitHub Copilot CLI 为 Git 构建了 Spotify Wrapped

发布: (2026年2月15日 GMT+8 14:37)
10 分钟阅读
原文: Dev.to

Source: Dev.to

我构建的内容

git-wrapped — Spotify Wrapped,但用于你的 Git 历史。

每年十二月,Spotify 会告诉你是什么类型的听众。我想要同样的东西用于编码。如果你的终端能告诉你,你是凌晨 2 点编码的夜猫子,还是删除代码多于编写代码的代码外科医生

git-wrapped 是一个 Python CLI 工具,分析任意 Git 仓库并生成美观、彩色的终端报告。无需浏览器、仪表盘、账户——只需运行一个命令,即可看到你一年中的代码。

The Full Feature Set

  • The Numbers — 总提交次数、修改的文件数、添加/删除的行数、净行影响、活跃天数
  • Activity Heatmap — 使用 Unicode 方块字符在终端中完整渲染的 GitHub 风格贡献日历
  • When You Code — 按小时和星期显示编码节奏的柱状图
  • Top Files — 最常修改文件的排行榜
  • Languages — 带百分比条的编程语言占比
  • Streaks & Records — 最长连击、当前连击、最繁忙单日、最佳月份
  • Coder DNA — 基于提交模式的性格评估:夜猫子、早起鸟、周末战士、连击大师、特性机器、代码外科医生或平衡构建者
  • Fun Facts — 节假日提交、最长/最短提交信息、贡献者数量、生产力统计
  • Compare Mode — 年度对比(--compare 2024 2025),显示增减百分比和性格变化追踪
  • Share Card — 可复制粘贴的纯文本卡片,用于社交媒体分享(--share
  • JSON Export — 将原始统计导出为 JSON,供进一步分析或集成

为什么我构建了它

我在终端里花了很多时间。我想要一些能庆祝开发者工作成果的东西——不仅仅是被合并的 PR,还包括深夜的调试会话、周末的副项目、以及没人注意到的 14 天提交连击。

git-wrapped 让这些都可见。而且它很有趣。

演示

GitHub 仓库:

Demo

试一试

# Install from PyPI
pip install git-wrapped

# Or install from source
git clone https://github.com/stackmasteraliza/git-wrapped.git
cd git-wrapped
pip install -e .

# Run on any repo
git-wrapped

# Analyze a specific year
git-wrapped --year 2025

# Compare two years
git-wrapped --compare 2024 2025

# Generate a share card
git-wrapped --share

Tech Stack

  • Python 3.8+ — 核心语言
  • Rich — 终端格式化(面板、表格、进度条、样式化文本)
  • Git log parsing — 使用 --numstat--format 的自定义解析器,提供文件级统计
  • Zero external API calls — 所有操作本地运行;你的数据永不离开你的机器

只有一个外部依赖。就是这样。

Source:

我的 GitHub Copilot CLI 使用体验

GitHub Copilot CLI 是我在整个项目中的配对程序员。与其在 Stack Overflow、Git 文档和 Rich 文档之间切换标签页,我一直待在终端里,直接向 Copilot 提问。

1. 理解 git log 格式

第一个挑战是弄清楚如何从 git log 中提取结构化数据。我让 Copilot CLI 解释 --format 标志,它给出了每个占位符的清晰拆解——%H 表示哈希,%an 表示作者姓名,%aI 表示 ISO 日期,%s 表示主题行——以及 --numstat 如何添加每个文件的插入/删除统计,>>> 分隔符如何用于可靠的提交分割以便解析。

Copilot CLI — git log format

2. 计算提交连击

计算最长的每日提交连击比预想的要复杂。我需要处理间隔、去重日期,并同时追踪历史最长连击和当前活跃连击。

我向 Copilot CLI 询问实现思路,它给出了多种方案——使用 datetime.timedelta 检测连续天数的 Python 版本,甚至还有 Bash 单行脚本。我直接把 Python 方法搬进了分析器:

# Copilot helped me arrive at this pattern
sorted_dates = sorted(set(commit_dates))
streak, max_streak = 1, 1
for i in range(1, len(sorted_dates)):
    if (sorted_dates[i] - sorted_dates[i-1]).days == 1:
        streak += 1
        max_streak = max(max_streak, streak)
    else:
        streak = 1

Copilot CLI — streak calculation

3. 按小时分组提交

为了绘制 “When You Code” 图表,我需要把提交划分到 24 个小时的区间。Copilot 建议使用 datetime 从每个提交时间戳中提取小时,然后用 collections.Counter 进行计数。得到的数据直接喂给 Rich 的条形图渲染。

4. 渲染终端热力图

这是最难实现的视觉效果——类似 GitHub 的贡献热力图,但在终端里使用彩色 Unicode 方块。

我向 Copilot CLI 询问如何使用 Python 的 Rich 库渲染彩色热力图,它给出了两种思路:

  • 基于表格的方案——使用 Rich 的 Table 并为单元格着色。
  • 基于块字符的方案——将数值映射到 字符并使用 ANSI 颜色。

我最终把两者结合起来——用 Rich 的 Console 管理颜色,用块字符绘制网格单元:

colors = ["bright_black", "dark_green", "green", "bright_green"]
char   = "█"

for week in range(weeks):
    for day in range(7):
        intensity = get_intensity(data[week][day])
        output += f"[{colors[intensity]}]{char}[/]"

Copilot CLI — heatmap rendering

影响

如果没有 Copilot CLI,这些问题的处理过程会是:

  1. 打开浏览器。
  2. 浏览文档。
  3. 找到相关示例。
  4. 进行适配。
  5. 测试。

这种循环会打断思路。

使用 Copilot CLI 时的循环是:

  1. 提问
  2. 得到可用答案
  3. 适配并继续

我全程待在终端中。认知负荷下降,我可以专注于让输出更具愉悦感,而不是与实现细节搏斗。感觉它不像是使用工具,更像是与一位记住所有手册的伙伴进行配对编程。

挑战与发现

热力图是最难的部分。
Ter

终端没有像素——你在使用字符网格,每个“单元格”是一个文本字符。要让热图看起来像 GitHub 的贡献图,需要精确的数学计算:将 52 周 × 7 天映射到网格,选择合适的 Unicode 块字符,并挑选在不同终端主题下都好看的绿色色调。

人格检测出乎意料地有趣。
“Coder DNA” 功能会根据你的提交模式为你分配一种人格。校准阈值(例如,“30 % 的提交在晚上 10 点之后 = 夜猫子”)需要在大量真实仓库上运行,以确保标签既准确又有趣,而不是随意的。

Rich 简直不可思议。
Python 的 Rich 库负责所有终端视觉效果的重活——面板、表格、进度条、彩色文本。正是它让 git‑wrapped 看起来精致,而无需网页 UI。

什么让它与众不同

对开发者

  • 在几秒钟内可视化你的编码习惯。
  • 发现你未曾察觉的模式(原来我大多数代码都是在星期四写的)。
  • 在团队站会上作为有趣的开场话题。

对团队

  • 在共享仓库上运行,查看全团队的模式。
  • 进行年度对比,跟踪团队节奏的演变。

对社区

  • 完全开源——可以 fork、扩展,成为你的专属项目。
  • 单一依赖——随处轻松安装。
  • 隐私至上——所有操作本地运行,数据不离开你的机器。

使用 Python、Rich 和大量深夜提交构建。由 GitHub Copilot CLI 提供动力。

GitHub Repository:

0 浏览
Back to Blog

相关文章

阅读更多 »