#git-diff #diff #git #git-config

app riffdiff

突出显示已更改行部分的差异过滤器

34 个稳定版本

3.2.0 2024 年 5 月 20 日
3.1.0 2024 年 3 月 18 日
2.32.0 2024 年 2 月 14 日
2.27.1 2023 年 11 月 13 日
2.18.0 2022 年 7 月 21 日

#31命令行工具

Download history 1/week @ 2024-04-30 223/week @ 2024-05-07 162/week @ 2024-05-14 83/week @ 2024-05-21 3/week @ 2024-05-28 17/week @ 2024-06-04 5/week @ 2024-06-11 12/week @ 2024-07-02 181/week @ 2024-07-30

每月下载量 181

MIT 许可证

1MB
3.5K SLoC

Riff,精炼差异

Riff 是一个围绕 diff 的包装器,突出显示哪些行部分已更改。

Screenshot of riff in action

类似于 git,Riff 将其输出发送到分页器,按照以下顺序尝试

  1. 在环境变量 $PAGER 中指定的内容
  2. moar 因为它很棒
  3. less 因为它无处不在

用法

git diff | riff

或者如果你这样做...

git config --global pager.diff riff
git config --global pager.show riff
git config --global pager.log riff
git config --global interactive.diffFilter "riff --color=on"

... 那么所有未来的 git diffgit showgit log --patch 输出都将被精炼。

或者您可以将 riff 作为 diff 的别名使用

riff file1.txt file2.txt

配置

您可以通过设置 RIFF 环境变量为一条或多条(空格分隔)命令行选项来配置 riff

例如,将 RIFF=--no-adds-only-special 设置为禁用仅添加的特殊高亮显示。

安装

使用 Homebrew

brew install riff

使用 Archlinux 用户仓库 (AUR)

paru -S riffdiff

Rust 包

cargo install riffdiff

手动安装

  1. 请访问 此处 并下载您平台上的正确二进制文件

    • 如果您的平台没有二进制文件,请 报告问题
  2. chmod a+x riff-*

  3. mv riff-* /usr/local/bin/riff

  4. 可选地,接着这样做以使 riff 默认高亮显示 git 输出

git config --global pager.diff riff
git config --global pager.show riff
git config --global pager.log riff
git config --global interactive.diffFilter "riff --color=on"

另请参阅

这个用于改进 Git 提交信息编辑的 VSCode 扩展器不错。 是的,我写了它,这里在自吹自擂。

如果你(像我一样!)正在使用 VSCode 进行 Git 提交信息编辑,这是一个很好的选择。

更多功能

riff 可以突出显示由 git 创建的冲突标记。

Screenshot of riff highlighting conflict markers

riff 突出显示 git 合并提交的高亮显示。

Screenshot of riff highlighting merge commits

开发

如果你在 testdata 目录中放置示例输入和输出,那么运行 cargo test 将会验证它们是否匹配。

运行 ci.sh 来执行与 CI 相同的操作。

运行 benchmark.py 来获取当前源代码与早期版本相比的运行速度数字。

运行 git log -p | cargo run -- 来演示高亮显示。

发布新版本

只需运行 ./release.sh 并按照说明操作。

如果你想要在不实际发布任何内容的情况下测试发布脚本,请执行:

./release.sh --dry

待办事项

杂项

  • 在差异中渲染 ESC 字符为 Unicode ␛
  • --help:如果我们尚未从 $PATH 内部执行,则仅打印安装到 $PATH 的帮助信息。
  • 运行 git show 57f27da 并思考我们应该使用什么规则来突出显示 REVERSE 和 reversed() 行。
  • 添加测试,确保输入行数不会改变,这会搞乱 git add -p 的行为。
  • 思考如何可视化添加的换行符以及下一行的缩进。
  • 确保我们正确地突出显示 git show --stat 的输出。
  • 确保我们能够处理 git 冲突解决差异。文件格式在 https://git-scm.cn/docs/git-diff#_combined_diff_format 中描述。
  • 给定命令行上的三个文件,我们应该将它们以及任何选项传递给 diff3 并突出显示结果。

待办事项

  • 检测移动的块,并在移动的添加和删除部分之前使用数字作为前缀。像对其他更改一样突出显示任何更改。

完成

  • 制作一个主程序,可以从 stdin 读取输入并将其打印到 stdout。
  • 让主程序通过前缀识别不同类型的行,并相应地着色。使用与 git 相同的颜色方案。
  • 让主程序识别由另一个块替换的行块。
  • 确保 Refiner 在旧或新为空时不会突出显示任何内容。
  • 使用 https://crates.io/crates/diffus 来细化 hunks。
  • 构建细化后的 hunks 并打印它们。
  • 将以下行加粗显示并设置为白色:^diff^index^+++^---
  • 使用正确的ANSI颜色代码将所有添加或删除的行前缀
  • 不要高亮显示添加或删除行上的初始 +-
  • 确保我们正确处理diff中的换行符,尝试运行 git show 28e074bd0fc246d1caa3738432806a94f6773185,带有和没有 riff
  • 可视化添加的行尾
  • 可视化删除的行尾
  • 正确可视化文件末尾删除的换行符
  • 正确可视化文件末尾添加缺失的换行符
  • 正确将文件末尾缺失的换行符作为上下文的一部分可视化
  • 正确处理 ax->bx\nc
  • 在处理之前从输入中去除所有颜色,使用户能够将Git的pager.diff和pager.show变量设置为'riff',而无需将color.diff设置为false。
  • 如果stdout是终端,则使用 git help configcore.pager 下描述的算法将输出通过管道传输到分页器。
  • 可以运行 git diff | riff 并获得合理的输出。
  • 如果有“太多”的差异,则不突出显示任何内容。这里的目的是突出显示更改,但如果它是替换而不是更改,则我们不希望突出显示。
  • 通过单词而不是字符进行细化
    • 测试用例 git show 2ac5b06:应突出显示 someone or 中的所有内容。
  • 如果人们将 $PAGER 设置为 riff,则努力防止分支循环
  • 添加对 --help 的支持
  • 添加对 --version 的支持
  • 如果stdin是终端,则打印帮助并退出
  • 在异常情况下,就像 --version 一样打印当前版本
  • 在异常情况下,打印问题跟踪器的链接
  • 添加测试用例,验证 git show 77c8f77 -- bin/riff 中的 Inspired by 部分突出显示为倒置的L。
  • 找出LCS算法的缩放情况,并改进当不调用它的启发式方法。
  • 调整应该尝试细分的区域大小的上限
  • 制作CI脚本
  • 设置CI调用CI脚本
  • 记录 ci.sh 的存在
  • 找出跨编译到Linux和macOS ARM的方法(研究 cross,它使用Docker进行交叉编译)
  • 制作发布脚本
  • 记录 release.sh 的存在
  • 验证Linux二进制文件是否正常工作
  • 记录安装说明
  • 发布公共版本
  • 修复 release.sh 中的FIXME
  • 向Refiner添加一个尾随空格分析阶段
  • 让Refiner以反向红色突出显示添加行中的空格错误
  • 仅突出显示添加部分的空格
  • 将非首行制表符的突出显示添加到空格分析中
  • 进行性能分析,看看我们是否能更快
  • ci.sh中,添加一个测试用例以验证我们的异常处理器在发布构建中打印回溯(当剥离发布二进制文件时应失败)
  • ci.sh中,添加一个测试用例以验证我们的异常处理器在发布构建中打印回溯中的riff框架的行号。这应在剥离发布二进制文件时失败。
  • 在发布构建中要求回溯中有行号
  • 使Linux二进制文件更小
  • 将argv内容放入崩溃报告中
  • 处理纯非git diff文件
  • 给定命令行上的两个文件,我们应该将它们传递给diff并突出显示结果。
  • 支持riff -b path1 path2来比较忽略空格的文件
  • 通过突出显示字符数限制如何突出显示限制,而不是通过突出显示令牌数限制
  • 获取一些类型的基准测试套件/示例
  • 执行git show 5e0a1b2b13528f40299e78e3bfa590d9f96637af并滚动到末尾。我们应该如何可视化No-newline-at-eof代码的重新格式化?
  • 执行git show 0f5dd84并思考如何可视化一行更改为自己结尾的逗号加上大量完全新的行。考虑一个常数数组增加一个或多个额外成员。
  • 执行git show -b 77c8f77并思考我们应该使用什么规则来突出显示文件末尾的+ refined+ page行的首行空格。

依赖关系

~6–9MB
~171K SLoC