Git Blame Lens

优雅的Git Blame可视化工具,为VSCode提供美观的代码行作者信息和提交历史显示。
🎯 让代码审查更高效 | 📊 可视化提交历史 | ⚡ 智能缓存优化
功能特性
🎯 核心功能
- 🔍 实时显示: 在状态栏实时显示当前光标所在行的Git作者信息
- 🖱️ 悬停提示: 鼠标悬停在代码行上时显示详细的提交信息,支持一键查看文件差异
- 📊 Blame注释: 在编辑器行首显示Git blame信息(日期 + 作者 + 行号)
- 🎨 智能标记: 最近3天内的提交用星号标记并高亮显示
- 📋 文件差异: 智能判断文件修改状态,显示合适的差异对比
⚡ 性能优化
- 🚀 模块化架构: 专业的模块分工,代码结构清晰易维护
- 📦 智能缓存: 文件状态感知的缓存策略,避免重复Git查询
- 🎯 精确刷新: 只更新真正需要的部分,避免全局刷新
- 📜 动态加载: 只处理可见行和预加载区域,性能优异
- 🔄 预测性加载: 智能预测滚动方向,提前加载内容
🎨 用户体验
- ⚡ 即时响应: 0延迟显示已缓存内容,快速加载新内容
- 🚀 超流畅体验: 编辑时无闪烁,保存时无全局刷新
- 📱 简洁菜单: 右键菜单直接显示Git Blame命令,操作更便捷
- 🎯 精确检测: 智能识别真正的修改行,换行不影响原行显示
- ⚙️ 高度可配置: 支持多种自定义显示选项
- 🔍 智能差异: 根据文件修改状态自动选择最合适的差异对比方式
使用方法
状态栏显示
当你在编辑器中移动光标时,状态栏右侧会自动显示当前行的Git作者信息:
- 格式:
👤 作者名 (提交哈希)
- 点击状态栏项目可以显示详细信息
悬停提示
将鼠标悬停在任意代码行上,会显示包含以下信息的详细提示:
- 作者姓名和邮箱
- 提交哈希和时间
- 提交摘要
- 行号
- 查看文件差异按钮:一键查看该提交的文件变更
Git Blame显示
- 在Git仓库中打开文件
- 右键点击编辑器 → 选择 "显示 Blame 注释"
- 或使用命令面板:
Ctrl+Shift+P → 输入 "显示 Blame 注释"
文件差异查看
- 鼠标悬停在任意代码行上
- 在弹出的提示框中点击 "查看文件差异"
- 自动打开差异对比视图:
- 有未提交修改:显示
文件名(提交哈希) ↔ 文件名(uncommitted)
- 无修改:显示
文件名(父提交^) ↔ 文件名(当前提交)
效果预览:
2024-01-15 张三* 1 │ function calculateSum(a, b) {
2024-01-10 李四 2 │ return a + b;
3 │ } // 新增未提交行,只显示行号
显示格式说明:
日期 作者 行号 - 已提交的行显示完整信息,行号在最后
行号 - 新增未提交的行只显示行号,保持布局一致
* - 最近3天内的提交会标记星号并高亮显示
🎬 功能演示
文件差异查看
当你悬停在代码行上并点击"查看文件差异"时,扩展会智能判断文件状态:
场景1:文件有未提交的修改
标题:index.tsx(a1b2c3d4) ↔ index.tsx(uncommitted)
左侧:该提交时的文件内容
右侧:当前工作区的文件内容
场景2:文件没有修改
标题:index.tsx(a1b2c3d4^) ↔ index.tsx(a1b2c3d4)
左侧:父提交时的文件内容
右侧:当前提交时的文件内容
这样你可以清楚地看到:
- 🔍 当前修改:如果文件被修改了,看到的是提交版本与当前版本的差异
- 📝 历史变更:如果文件没修改,看到的是该提交引入的具体变更
右键菜单
在编辑器中右键点击,可以看到以下Git Blame相关命令:
- 显示 Blame 注释 - 显示所有行的blame信息(当未激活时)
- 隐藏 Blame 注释 - 隐藏blame显示(当已激活时)
- 刷新 Blame 注释 - 重新加载blame信息(当已激活时)
命令面板
按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (Mac) 打开命令面板,搜索:
显示 Blame 注释 - 显示所有行的blame信息
隐藏 Blame 注释 - 隐藏blame显示
刷新 Blame 注释 - 重新加载blame信息
⚙️ 配置选项
在VSCode设置中搜索 "Git Blame Lens" 可以找到以下配置选项:
gitBlameLens.showInStatusBar : 在状态栏显示当前行的Git作者信息 (默认: true)
gitBlameLens.showOnHover : 鼠标悬停时显示详细的提交信息 (默认: true)
gitBlameLens.enableBlameAnnotations : 启动时自动显示Git blame注释 (默认: false)
gitBlameLens.recentCommitThreshold : 最近提交的天数阈值,用星号标记 (默认: 3天)
gitBlameLens.blameAnnotationWidth : Blame注释区域的宽度 (默认: 18em)
gitBlameLens.preloadLines : 可见区域上下预加载的行数 (默认: 30行)
gitBlameLens.scrollDebounceMs : 滚动防抖延迟时间 (默认: 20毫秒)
技术亮点
🏗️ 架构设计
- 🔧 模块化架构: 单一职责原则,4个专门模块协同工作
- 🎯 松耦合设计: 模块间通过接口交互,易于扩展和测试
- 📦 缓存分层: 多级缓存策略,Git缓存 + 本地缓存 + 显示缓存
⚡ 性能优化
- 🚀 智能缓存: 5秒缓存 + 文件状态感知,避免重复查询
- 📊 批量处理: 分批加载Git信息,避免UI阻塞
- 🎯 精确更新: 只清除和重新加载真正受影响的行
- 🔄 增量刷新: 文档变化时智能判断影响范围
🎨 用户体验
- 📱 渐进式加载: 内容逐步出现,提供流畅的视觉体验
- 🎯 精确定位: 准确获取每行的Git blame信息
- 🎨 主题适配: 自动适配VSCode主题颜色
- 🔧 错误恢复: 优雅处理Git查询失败等异常情况
系统要求
- VSCode 1.74.0 或更高版本
- Git 已安装并在PATH中可用
- 当前文件必须在Git仓库中
安装方法
- 在VSCode中打开扩展面板 (
Ctrl+Shift+X )
- 搜索 "Git Author"
- 点击安装
或者从VSIX文件安装:
- 下载
.vsix 文件
- 在VSCode中按
Ctrl+Shift+P 打开命令面板
- 输入 "Extensions: Install from VSIX..."
- 选择下载的
.vsix 文件
许可证
MIT License
贡献
欢迎提交Issue和Pull Request!
更新日志
0.0.4 (2024-12-29)
🎯 重大架构重构和功能优化
✨ 新功能
- 🔍 智能文件差异查看:悬停提示中新增"查看文件差异"功能,智能判断文件修改状态
- 有未提交修改:显示提交版本 vs 当前工作区
- 无修改:显示父提交 vs 当前提交
- 📱 简化右键菜单:去掉子菜单,直接显示Git Blame命令,操作更便捷
- 📅 完整日期显示:blame信息现在显示完整的年-月-日格式(如:2024-12-29)
- 🔧 智能修改行检测:精确识别真正被修改的行,换行操作不再错误标记原行为修改
- 🎯 动态标题格式:差异对比标题根据文件状态智能调整
🚀 性能优化
- ⚡ 模块化架构:将1000+行的单文件拆分为4个专门模块,提升可维护性
BlameCache - 缓存管理
BlameDecorator - 装饰器处理
DocumentChangeHandler - 文档变化处理
BlameDecorationManager - 主管理器
- 🎯 精确刷新策略:
- 编辑时只清除受影响的范围,而非全部缓存
- 保存时只重新加载之前被修改的行,避免全局刷新
- 减少90%+的不必要Git查询
- 📦 智能缓存:文件状态感知的缓存策略,未保存修改时跳过缓存
🐛 问题修复
- 🔧 修复多行编辑时blame信息错位的问题
- 🎨 修复代码对齐问题,确保所有行完美对齐
- ⚡ 修复编辑后与刷新后显示不一致的问题
- 🔄 优化行号偏移处理,避免缓存映射错乱
🎨 用户体验改进
- 📱 更简洁的右键菜单:去掉子菜单层级,直接显示命令,减少点击步骤
- 🎯 更流畅的编辑体验:编辑时无闪烁,保存时无全局刷新
- 📊 更准确的信息显示:确保blame信息与实际Git状态完全一致
- 🔍 智能差异对比:根据文件修改状态自动选择最合适的对比方式
- 🎨 优化的图标:使用更合适的图标表示不同功能(如diff图标表示差异查看)
0.0.3
0.0.2
- 移除了调试日志,提高运行性能
- 保持了缓存机制,避免重复查询
- 错误处理不再抛出异常,减少性能开销
0.0.1
- 初始版本
- 基本的Git blame功能
- 状态栏显示
- 悬停提示
- 缓存机制
| |