本文档介绍了 bat 的 Git 集成系统,该系统会检测并显示相对于 Git 索引的文件修改。Git 集成使 bat 在 Git 仓库内显示文件时,能够显示添加、修改和删除行的视觉指示符。
有关显示 Git 更改的视觉样式和装饰的信息,请参阅 样式组件和装饰。
bat 中的 Git 集成系统提供以下功能:
该系统在 git 功能标志下进行条件编译,并使用 git2 crate 进行 Git 操作。
Git 集成使用 LineChange 枚举将文件更改分为四种不同的类型:
| 更改类型 | 描述 | 视觉指示器 |
|---|---|---|
Added (添加) | 添加到文件的新行。 | 通常用 + 或绿色标记显示。 |
RemovedAbove (上方移除) | 在当前位置上方移除的行。 | 当文件开头出现移除时,在第 1 行上方显示。 |
RemovedBelow (下方移除) | 在当前位置下方移除的行。 | 对于文件中部的移除,显示在特定行位置。 |
Modified (修改) | 已更改的现有行。 | 曾经存在但内容已更改的行。 |
来源:src/diff.rs10-15 src/diff.rs60-75
Git 集成遵循特定流程来定位仓库和解析文件路径。
核心差异处理使用 git2::Repository::diff_index_to_workdir() 来比较工作目录与 Git 索引。
来源:src/diff.rs27-34 src/diff.rs38-80
Git 集成输出一个 LineChanges 类型,该类型将行号映射到更改类型。
此数据结构与 bat 的打印机系统集成,以在语法高亮显示的内容旁边显示视觉更改指示器。更改信息由装饰系统使用,以渲染适当的视觉标记。
Git 集成通过快照测试进行全面测试,该测试可验证不同样式组合的视觉输出。
测试套件包括对样式组合的全面覆盖。
changes 样式测试。changes,grid、changes,header、changes,numbers。来源:tests/snapshot_tests.rs1-45 tests/snapshots/generate_snapshots.py9-18 tests/snapshots/sample.modified.rs1-24
整个 Git 集成系统使用 git 功能标志进行条件编译。
这使得 bat 在不需要 Git 集成时可以不带 Git 依赖进行构建,从而减少了二进制文件大小和最小安装的依赖项。
来源:src/diff.rs1 tests/snapshot_tests.rs1 tests/snapshot_tests.rs8