CClash 下载中心下载入口

配置笔记

Clash 合并两份配置时如何逐项处理字段冲突

Clash 合并两份配置时如何逐项处理字段冲突。了解适用条件、操作步骤与常见问题的排查方法。

更新于 2026/10/4 · Clash 编辑组

合并两份 Clash 配置时的字段冲突,指的是两份表示在同一路径上的映射里出现了相等的键,并且值需要二选一或再组合。这不能靠把两份 YAML 文本首尾相接、让同名键出现两次来完成。那种做法制造的是重复键,而映射要求键唯一;键顺序又不进入构造。合并必须在表示层逐项处理。

适用条件

适用于手头有两份可以加载(或经整理后可以加载)的配置、需要合成一份键唯一的流的场合。适用于有的字段只在一方出现、有的两边都有的情况。不适用于把注释当数据合并。两份若是多文档流,先按文档分开处理:三条短横线开始的是另一文档,不会自动并进前一映射;三个点结束文档且不开始新文档。

为何不能靠重复键合并

表示中映射是无序的唯一键关联。把乙方的键直接追加到甲方同一映射的文本末尾,只是在呈现里写了第二次键。组成时要么无法形成合法映射,要么依赖处理器的非规范选择,结果不可移植。序列不同:序列是有序条目,合并序列是决定条目如何拼接或挑选,与映射键冲突不是同一类问题。锚点与别名只在能够组成的那份表示图内有效,不能假定一份文档里的 * 指向另一份文档里的 &。

逐项处理步骤与判断依据

  1. 分别加载两份流,得到各自的表示图。无法加载的先修格式,不要带着格式不良的片段合并。
  2. 从根节点起按路径对齐。双方都是映射时,取键的并集:只在一方出现的键连同其值节点保留;双方都有的键记为冲突。双方都是序列时,按条目策略选择拼接、替换或手工挑选,不要把序列条目误当成映射键。一方是标量、另一方是集合,属于结构冲突,不能用重复键调和。
  3. 对每个冲突键单独决定:保留甲方的值、保留乙方的值,或构造一个新的值节点(例如两个子映射再递归合并)。决定必须写出唯一的一个键,不要两个都写入。
  4. 递归进入嵌套映射,重复并集与冲突处理。判断依据:合成后每个映射键唯一;构造只依赖表示,不依赖某份原文的键排列或注释位置。
  5. 输出时允许处理器选择新的键顺序、样式和是否加注释,那是呈现细节。不要要求合成文本与某份原文逐行相似。若需要同一子树出现在多处,合并完成后再设置锚点与别名,避免合并过程中别名悬空。

失败时下一步

合成结果无法加载,说明呈现写坏或仍有重复键,回到两份原始字符流,缩小合并范围后重做。冲突无法判定时不要默认乙方覆盖甲方,那不是规范机制。结构冲突应人工选择节点种类。确认前保留两份原文,因为 dump 会丢掉注释并可能重排键。

资料来源: https://yaml.org/spec/1.2.2/

← 返回全部文章