graphify git merge driver:彻底告别graph.json冲突标记的终极方案
【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify
graphify是一个把代码库、文档、SQL 表和 PDF 一键转成可查询知识图谱的开源工具,团队常把生成的graph.json提交进 Git 共享。但当两名开发者并行提交时,这个 JSON 文件极易出现冲突标记,导致图谱损坏。graphify 内置的git merge driver会自动对graph.json执行"节点+边"的并集合并,让冲突标记从此消失,无需任何手动处理。
为什么 graph.json 总是打架?
graphify 运行后会生成三个文件:
graphify-out/ ├── graph.html 浏览器打开的交互视图 ├── GRAPH_REPORT.md 图谱亮点报告 └── graph.json 完整知识图谱(节点 + 边)为了方便全团队共享,官方推荐把graphify-out/整个提交进仓库(详见 README.md 的 Team setup 章节)。问题来了:graph.json是一个体积不小的纯文本 JSON,两个人各自添加节点后同时提交,git 只能按文本行合并——而 JSON 的行与语义毫无关系,结果就是满屏的<<<<<<<冲突标记,图谱直接不可解析。
手动解决这类冲突既痛苦又危险:删错一行,图谱里的一条边就永久丢了。
并集合并原理:不挑行,只认节点和边
graphify 的解决方案是让 git 在合并这个文件时,不再走"文本 diff",而是调用一个自定义 merge driver,按图结构做合并:
- git 把合并涉及的三份内容交给 driver:基准版
%O、当前分支版%A、对方分支版%B - driver 分别加载两个
graph.json,用图的并集运算(union)把两边的节点和边全部合并 - 结果写回当前分支的文件,始终以 0 退出——只要输入合法,合并就成功,永不阻塞
对应源码在 cli.py 的merge-driver子命令中,核心就是"加载两侧图 → 合并 → 原子写回"三步。相比文本合并,并集合并保证双方新增的知识一条都不丢:你加了AuthFlow节点,同事加了Payment节点,合并后的图谱里两者都在。
一键安装步骤:30 秒启用 merge driver
整个注册过程由一条命令完成,无需手写任何 git 配置:
graphify hook install它会在仓库里自动完成两件事(实现在 hooks.py):
| 写入位置 | 内容 | 作用 |
|---|---|---|
.git/config | merge.graphify.driver | 告诉 git 用哪个程序执行合并 |
.gitattributes | graphify-out/graph.json merge=graphify | 把该合并策略绑定到graph.json文件 |
两个文件都建议随仓库共享,这样每个新成员的克隆下来就自带合并能力。装完可以用下面命令确认状态:
graphify hook status # 查看 hooks 与 merge driver 是否已注册 graphify hook uninstall # 不再需要时一键移除启用后的团队工作流非常顺滑(见 README.md 第 438 行附近的说明):
- 一人运行
/graphify .并提交graphify-out/ - 其他人 pull 后即可直接查询图谱
hook install注册的 post-commit 钩子会在每次提交后自动重建图谱(纯 AST 解析,不产生 API 费用),merge driver 同时生效:两位开发者并行提交,各自的图谱被自动并集合并,永远不会留下冲突标记
安全边界:不是无脑合并
merge driver 并非"什么都吞",它内置了几道防线(见 cli.py):
- 50 MB 文件大小上限——超出视为异常,拒绝合并
- 10 万节点上限——并集结果过大时中断,交给人工检查
- 输入损坏时以 1 退出——git 会把它当真实冲突展示,而不是静默接受一份被污染的图谱
另外,注册 driver 时会自动"钉住"当前 Python 解释器的完整路径并做字符白名单校验,避免在合并触发时因graphify命令不在 PATH(比如 uv/pipx 隔离安装)而静默失效。
常见问题 FAQ
合并后图谱会越并越大吗?并集只增加、不删除。若某节点已删除,需要后续运行/graphify --update或完整重建来清理,这是所有"生成物入库"方案的共性。
manifest.json 要提交吗?要。它现在以相对路径存储键值,加载时自动重新锚定,提交后可避免新成员首次 checkout 时的全量重建。
只想要图谱、不要合并能力,行吗?可以。merge driver 是hook install的附带能力,你可以只手动执行合并、或改用graphify merge-graphs子命令离线合并多个图谱文件。
一句话总结:把"文本合并"升级为"语义合并",是 graphify 对团队协作最实用的设计。装好graphify hook install之后,graph.json的冲突标记就成了历史名词。🎉
【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考