解决什么问题
定时把 n8n 工作流备份到 GitHub 时,如果每次运行都直接更新文件,即使工作流没有实质修改,也会产生冗余提交,让提交历史变得嘈杂。难点在于判断“这次备份的内容是否真的变了”,而且不能简单地把普通哈希与 GitHub 返回的 SHA 直接比较,因为后者是 Git blob SHA,不一定等于工作流 JSON 的标准哈希。
你可以怎么做
从你现有的备份工作流出发,在更新 GitHub 文件之前加一段内容比较:先导出当前工作流 JSON;再获取 GitHub 上已有文件并解码其 Base64 内容;把两边按同一种方式规范化,例如都解析为 JSON 后以一致方式序列化;然后比较规范化后的内容,只有不同时才执行 GitHub 更新。GitHub 返回的文件 SHA 仍保留给更新请求本身使用,但不要拿它作为“是否变化”的判断依据。另外要检查导出的 JSON 里是否包含会无意义变化的元数据,否则比较仍可能产生不必要的提交。具体节点配置和代码片段需结合你当前的 GitHub 节点返回结构来调整,材料中未给出可直接套用的完整实现。
能给其他人带来什么
- 做定时备份的自动化使用者可以减少无意义的 GitHub 提交,让提交历史只反映真正的工作流修改。
- 需要判断文件是否变化的人可以获得一种更稳妥的比较思路:比较规范化后的内容,而不是直接比较普通哈希与 Git blob SHA。
依据与启发 展开查看来源、推断与建议
有回复建议获取 GitHub 上现有文件的 SHA,并在 If 节点前用 Code 节点比较当前工作流 JSON 的加密哈希,若相同则跳过 GitHub 更新。
Github Workflow Question ↗另一条回复指出 GitHub 返回的是 Git blob SHA,不一定等于工作流 JSON 的标准哈希,因此建议比较实际文件内容:导出当前 JSON、获取并解码 GitHub 文件内容、统一规范化后比较,仅在内容不同时更新。
Github Workflow Question ↗使用时注意
- 材料只给出思路和流程步骤,没有提供可直接运行的完整代码或节点配置。
- 导出 JSON 中若包含会无意义变化的元数据,内容比较仍可能产生冗余提交,需要额外处理。
- 该方法针对 n8n 工作流备份到 GitHub 的场景,迁移到其他工具或其他文件类型时需要自行验证。
