开源项目
zmrlft/GreenWall avatar
zmrlft/GreenWall

GreenWall:把 GitHub 贡献图变成画布,但别把它当履历工具

该项目围绕「customizing the GitHub contribution graph, allowing you to draw various patterns on it. GitHub .」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。

1,363 个 Star95 个 ForkTypeScriptMIT
GitHub

秒懂

它是什么?
GreenWall 是一个用 TypeScript 和 Go 编写的桌面应用,让你把任意图片转换成 GitHub 贡献热力图,并自动创建仓库推送提交。本文分析它的工作机制、使用门槛和适用边界。
适合谁用?
GreenWall 适合那些想用 GitHub 贡献图做个人表达或实验的开发者,比如在主页上画个 Logo 或文字。它不适合把贡献图当作真实工作量的证据,因为提交历史是人为构造的,README 也明确警告不要用于伪造求职材料。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 127 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题,谁需要它

GitHub 的贡献图是一张 52 列乘以 7 行的绿色格子,默认只反映提交频率。GreenWall 把这个格子变成可编程的画布。你上传一张图片,它转换成对应的热力图,然后自动创建远程仓库并推送提交,让贡献图显示出你想要的图案。这个工具面向的是想在个人主页上展示个性图案的开发者,或者想研究贡献图机制的人。它不是一个生产力工具,而是一种表达工具。如果你对 GitHub 的贡献算法好奇,或者想在主页上放一个像素画,GreenWall 提供了完整的流程。

从图片到热力图:两种转换模式

GreenWall 的核心是图片到贡献图的转换。它提供两种模式:Auto 模式适合大多数照片和灰度图,Binary 模式适合黑白文字或线条画。Auto 模式使用双线性插值来平滑颜色过渡,Binary 模式则用最近邻插值保持边缘锐利。你还可以调整亮度反转、阈值、缩放滤镜和笔画恢复参数。阈值控制哪些像素算作提交,笔画恢复用于补全细线。这种设计让用户能针对不同输入做微调,但同时也意味着第一次使用时需要实验。README 给出了一张推荐设置表,比如黑底白字建议 Binary 模式加反转,阈值 0 到 10,笔画恢复 12 到 24。这些参数不是自动优化的,你得手动试。

实际操作:从上传到推送的完整流程

首先安装 Git,然后下载应用并获取一个 Personal Access Token(PAT),用于登录 GitHub。登录后,上传图片,选择行数(1 到 7)和列数(1 到 52),调整模式和相关参数。在日历上悬停可以预览图案位置,点击放置,右键取消。放置后,你可以拖拽绘制,用画笔和橡皮擦(右键切换),还能调节笔刷强度来产生不同深浅的绿色。完成设计后,点击 Create Remote Repo,编辑仓库名称和描述,选择公开或私有,然后点 Generate & Push。应用会自动创建仓库并推送提交。整个过程不需要手动敲 Git 命令,但前提是你已经准备好 PAT。

复制粘贴功能:一个被低估的细节

GreenWall 提供了一个复制粘贴功能,让你在日历上选择一块区域,按 Ctrl+C 复制,然后移动鼠标预览,左键或 Ctrl+V 粘贴。这比重新上传图片再调整参数要快得多。比如你想在贡献图上重复一个 Logo 或一段文字,复制粘贴能节省大量时间。但要注意,这个功能只在应用内部有效,不能跨会话保存。如果你关闭应用再打开,剪贴板里的图案就没了。这个限制在 README 里没有明确说明,但根据描述,复制模式是基于当前会话的。

平台差异:macOS 的额外步骤

Windows 和 Linux 用户直接运行应用即可。macOS 用户因为应用未签名,首次启动会碰到安全限制。README 给出了两条命令来解决:sudo xattr -cr ./green-wall.app 和 sudo xattr -r -d com.apple.quarantine ./green-wall.app。第一条清除所有扩展属性,第二条只移除隔离属性。你可以从上到下依次尝试,直到问题解决。这些命令不会启动应用,你需要手动双击打开。这个额外步骤对非技术用户是个门槛,但对开发者来说只是小事。

一个真实限制:贡献显示的延迟和不可控性

GreenWall 能推送提交,但 GitHub 更新贡献图需要 5 分钟到 2 天。这意味着你不能实时看到效果,也无法保证最终显示的图案和你在应用里预览的完全一致。GitHub 的贡献计算有缓存和异步处理,GreenWall 无法控制这个过程。另外,如果你把仓库设为私有,需要在个人设置里启用 Include private contributions,否则私有仓库的提交不会显示在贡献图上。README 建议用私有仓库来隐藏内容,但这增加了配置复杂度。如果你追求精确的图案,这个延迟和不确定性可能让你失望。

维护和升级成本,以及许可证

项目使用 MIT 许可证,允许自由使用和修改。最近的版本更新频繁,v0.7.5 在 2026 年 3 月发布,v0.7.4 在 1 月,v0.7.3 在 12 月,说明维护活跃。但开发环境需要 Go 1.24+、Node.js v22+ 和 Wails v2.10.2,这对想从源码构建的用户有一定要求。升级成本主要在于跟随新版本,因为每次更新可能改变参数或界面。如果你只是用预编译的二进制,升级就是下载新版本,但要注意 macOS 的签名问题可能每次都需要重新执行 xattr 命令。

替代方案:手动脚本与 GitHub Actions

GreenWall 的替代方案是写一个自定义脚本,用 Git 命令批量创建提交,然后推送到远程仓库。这种方法更灵活,你可以完全控制提交的日期、数量和消息,但需要自己处理图片到提交序列的转换。另一个思路是用 GitHub Actions 定时生成提交,但 Actions 的调度精度有限,不适合精确控制图案。GreenWall 的优势在于图形界面和自动推送,省去了写脚本的麻烦。但如果你需要复杂的图案或动态更新,脚本可能更合适,因为你可以版本化逻辑并重复使用。

编辑结论

GreenWall 适合那些想用 GitHub 贡献图做个人表达或实验的开发者,比如在主页上画个 Logo 或文字。它不适合把贡献图当作真实工作量的证据,因为提交历史是人为构造的,README 也明确警告不要用于伪造求职材料。使用前先确认你理解 GitHub 的贡献显示延迟(5 分钟到 2 天),并准备好一个 Personal Access Token。如果你只是想要一个静态的贡献图装饰,GreenWall 的自动推送功能很方便;但如果你需要精确控制每个像素的颜色或日期,它的行数和列数限制(1 到 7 行,1 到 52 列)可能不够用。建议先用小尺寸图片测试,观察生成效果后再决定是否推送。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记