diff
alias: d
两种对比模式:对当前配置的输出文件做文本级 diff(file,默认),或对两个订阅源做节点级 diff(nodes)。
diff file(默认模式)
thurgio diff [file] [NAME]
bare thurgio diff 等价于 thurgio diff file。
执行过程:
- 读取
setting.output中配置的所有输出文件的当前内容(不存在的文件视为空内容)。 - 执行一次强制构建(等价
build --force,会真实访问订阅源)。 - 逐文件打印新旧内容的行级差异:
-删除行、+新增行、空格前缀为未变更行。
| 参数 | 说明 |
|---|---|
NAME | 可选——只对比路径中包含该子串的输出文件 |
# 对比所有输出
thurgio diff
# 只对比路径含 example 的输出
thurgio diff file example
NAME匹配的是输出路径子串,不是 provider 名;但输出路径通常包含 item 名,按名过滤在多数场景下等效。
diff nodes
thurgio diff nodes <from> <to>
节点级对比两个订阅源:
http(s)://开头视为 URL,其余视为本地文件路径。- 格式自动检测(Clash / V2RayN / SIP002 等),不套用规则管线——对比的是原始节点。
- 不可解析的条目被丢弃并记 debug 日志。
输出分组
1 added, 0 removed, 1 changed, 1 renamed, 1 unchanged
+ HK-01 (trojan 9.9.9.9:443)
~ US-01: ss 1.2.3.4:8388 → ss 1.2.3.4:9000
↻ TW-01 → TW-02 (ss 6.6.6.6:8388)
| 分组 | 标记 | 颜色 | 判定 |
|---|---|---|---|
| added | + | 绿 | 仅新源中存在 |
| removed | - | 红 | 仅旧源中存在 |
| changed | ~ | 黄 | 同名但指纹不同 |
| renamed | ↻ | 黄 | 指纹相同但名称不同 |
| unchanged | — | — | 完全一致 |
指纹 = 去掉 name 字段后的全部序列化字段(type/server/port/密码等),任一变化即视为 changed。全部无变化时整行绿色输出 N unchanged。颜色遵循 RUST_LOG_ANSI / NO_COLOR。
示例
# 对比升级订阅前后的节点变化
thurgio diff nodes prov/old.yaml https://example.com/sub
# 对比两个本地文件
thurgio diff nodes prov/a.yaml prov/b.yaml