Git XL 使用详解:如何追踪 Excel VBA 代码的每一行变更
Git XL 是一款开源的 Git 命令行扩展,让 git diff 能够直接解析 Excel 工作簿中的 VBA 宏代码。它无需打开 Excel 即可读取工作簿文件,帮助你像追踪普通源代码一样,精确追踪 Excel VBA 代码的每一行变更。
Git XL 解决了什么问题?
如果你把 Excel 文件放进 Git 仓库,运行 git diff 时只会得到一行冷冰冰的提示:
Binary files a/Book1.xlsm and b/Book1.xlsm differ
对维护 VBA 宏的开发者来说,这几乎等于没有信息——到底是哪个模块、哪一行被改了?改之前是什么?Git XL 正是为解决这个痛点而生:安装之后,Git 就能把 Excel 里的 VBA 代码当作普通源码文件来对比,直接输出逐行的增删内容。✨
支持哪些 Excel 文件格式?
Git XL 覆盖了常见的 9 种 Excel 文件格式,主流场景基本全覆盖:
| 格式 | 说明 |
|---|---|
xls / xlt | Excel 97-2003 工作簿 / 模板 |
xla / xlam | 加载项 / 启用宏的加载项 |
xlsx / xlsm | Excel 2007+ 工作簿 / 启用宏的工作簿 |
xlsb | 二进制格式工作簿 |
xltx / xltm | 模板 / 启用宏的模板 |
这些扩展名在 src/cli.py 中以 FILE_EXTENSIONS 常量统一定义。
Git XL 安装教程:全局与本地两种模式
Git XL 使用 Python 编写,Windows 平台提供预编译的二进制安装程序,安装完成后再做一步 Git 配置即可。🛠️
全局安装(每台机器一次)
先通过 Windows 二进制安装程序安装 Git XL,然后在命令行执行:
git xl install
这条命令会把 Excel diff 器注册到全局 Git 配置中,之后所有仓库都能对 Excel 文件做 VBA 级对比。
按仓库本地安装
如果只想在某个仓库生效,在仓库根目录下执行:
git xl install --local
配置将写入该仓库自己的 .gitattributes 和 .gitignore,不影响其他项目。
安装过程实际做了什么?
Git XL 的安装非常"克制",一共只改三处配置:
- Git 配置:注册
diff.xl.command,指向git-xl-diff.exe差异器 - .gitattributes:为 9 种 Excel 格式写入
*.xls diff=xl等规则,告诉 Git "这类文件请用 xl 差异器" - .gitignore:写入
~$*.xls等规则,自动忽略 Excel 打开文件时生成的临时锁文件(~$开头的文件不该被提交)
相关逻辑可以在 src/cli.py 的 Installer 类中阅读到,安装/卸载行为也有对应的单元测试 src/tests/test_cli.py 保障。
实战:第一次查看 Excel VBA 代码差异
配置完成后,对包含 VBA 代码的工作簿运行 git diff,输出会是这样:
diff --xl a/Book1.xlsb b/Book1.xlsb
--- a/Book1.xlsb/VBA/Module/Module1
+++ b/Book1.xlsb/VBA/Module/Module1
@@ -1,4 +1,4 @@
Option Explicit
Public Function Version() As String
- Version = "v1.0"
+ Version = "v1.1"
End Function
📊 一目了然:Module1 模块中版本号从 v1.0 改成了 v1.1。在 Windows 终端中,新增行会以绿色、删除行以红色高亮显示(由 colorama 实现);如果新增或删除了整个 VBA 模块,diff 会完整展示该模块的全部代码。
Git XL 工作原理简介
Git XL 的差异器 git-xl-diff.exe 的核心实现只有两个文件,值得了解一下:
- src/diff.py:差异器本体。它利用 oletools 库中的
VBA_Parser直接从工作簿文件中提取所有 VBA 宏(完全不需要 Excel 环境),再借助 Python 标准库difflib生成标准的 unified diff,并逐模块处理"新增、修改、删除"三种情况 - src/cli.py:命令行入口,负责
install/uninstall/env/version等命令,以及 Git 配置的读写
项目还在 src/tests/ 目录下附带了示例工作簿 Book1.xlsb,方便你搭建自己的测试场景。
常用命令速查表
| 命令 | 作用 |
|---|---|
git xl install | 全局安装(注册 Excel diff 器) |
git xl install --local | 仅在当前仓库本地安装 |
git xl uninstall | 全局卸载,撤销所有配置 |
git xl uninstall --local | 仅撤销当前仓库的本地配置 |
git xl env | 查看当前 Git XL 环境信息 |
git xl version | 显示版本号 |
git xl help | 查看完整帮助 |
⚡ 安装和卸载都是可逆的:uninstall 会干净地移除 diff.xl 配置及 .gitattributes / .gitignore 中由 Git XL 写入的规则,不会留下垃圾配置。
如何从源码构建 Git XL?
如果你想自己编译 Windows 可执行文件,过程也很直接:
- 克隆源码仓库:
https://gitcode.com/gh_mirrors/gi/git-xl - 创建 Python 虚拟环境,按 requirements.txt 安装依赖(colorama、oletools、pyinstaller)
- 在仓库根目录运行构建脚本 scripts/windows/build.bat,由 PyInstaller 打包出 exe
- Windows 安装程序基于 Inno Setup 生成,脚本位于 scripts/windows/inno-setup-git-xl-installer.iss
详细构建说明可参考仓库中的 BUILDING.md。
总结
Git XL 用极小的成本解决了"Excel VBA 代码无法在 Git 中做代码级对比"这一长期痛点:一条 git xl install 命令,即可让 git diff 逐行展示 Excel 工作簿中 VBA 宏的每一次变更,同时自动忽略 Excel 临时文件。如果你的团队在用 Git 管理含 VBA 的 Excel 模板、报表工具或加载项,这个免费的开源扩展值得立即尝试。(小知识:Git XL 早期的名字叫 "git-xltrail"。)
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



