如何在Win和Linux间同步Navicat数据模型_导出ndm文件并利用Git实现版本管理

作者:袖梨 2026-07-12
不推荐直接用 .ndm 文件做跨 Win/Linux 的 Git 版本管理,因其为二进制内部格式,跨平台/跨版本兼容性差,Git 无法 diff 且易冲突;应导出为 UTF-8 编码的 SQL 和 XMI 2.1 文本文件进行 Git 管理,并严格遵循路径、命名及导入规范。

Navicat .ndm 文件在跨平台 Git 管理中是否可靠

不推荐直接用 .ndm 文件做跨 win/linux 的 git 版本管理。它本质是二进制封装格式,不同 navicat 版本(尤其是 windows 和 linux 客户端)生成的 .ndm 文件结构不一致,git 无法 diff,合并时必然冲突,且恢复失败率极高。

常见错误现象:git checkout 后 Navicat Linux 版打不开 Windows 导出的 .ndm,报错 "Invalid model file format" 或直接闪退;或打开后字段顺序错乱、关系线丢失。

  • Navicat 官方文档明确标注 .ndm 为“内部格式”,未承诺跨平台/跨版本兼容
  • Linux 版 Navicat(基于 Qt)对 Windows 生成的元数据编码(如路径分隔符、换行符、BOM)处理更敏感
  • 即使同版本,Win 上保存的 .ndm 在 Linux 上重新打开再保存,文件哈希值也会变——Git 误判为“已修改”

替代方案:导出为可 diff 的文本格式再 Git 管理

必须放弃 .ndm,改用 Navicat Data Modeler 内置的导出功能生成标准文本,才能实现 Win/Linux 双端协同。

  • 导出路径:菜单栏 File → Export → To SQL File,选 MySQL / PostgreSQL 等目标 DBMS,勾选 Include CREATE TABLEInclude Foreign KeysInclude Comments
  • 同时导出 File → Export → To XML (XMI),选 XMI 2.1 标准——这是唯一被 Git 友好支持的模型交换格式,能清晰展示实体、属性、关系的层级结构
  • SQL 文件用于物理验证(可直接导入本地数据库),XMI 文件用于逻辑比对(git diff 能看出谁删了哪个字段)
  • 所有导出文件统一用 UTF-8 编码保存,禁用 BOM(Navicat 导出默认无 BOM,但某些编辑器会偷偷加)

Git 仓库结构与协作规范

结构混乱是跨平台模型协同失效的主因。必须约定根目录下固定子路径,否则 Win/Linux 路径大小写、分隔符差异会破坏引用。

  • 根目录放 VERSION 文件(纯文本,内容如 v1.2.0-20260422),每次模型变更后更新并 git tag 绑定
  • 模型文件存于 /models/ 下,强制小写命名:user_auth.xmiuser_auth.sql,禁用空格和中文
  • .gitignore 必须包含:*.ndm*.bakThumbs.db.DS_Store(Linux 拉取 Win 提交时可能带入)
  • 禁止直接在 Navicat 里“保存模型”,所有变更必须走“导出 → 提交 → 同步 → 重新导入”闭环

Linux 端导入 XMI/SQL 的实操要点

Linux 版 Navicat 对导入路径和权限更严格,容易卡在第一步。

  • 导入 XMI:菜单 File → Import → From XML (XMI),必须点开“Advanced Options”,勾选 Overwrite existing objects,否则只追加不覆盖
  • 导入 SQL:右键目标连接 → Execute SQL File,编码务必手动选 UTF-8(Linux 默认可能为 ISO-8859-1,导致注释乱码、建表失败)
  • 若 SQL 导入报错 "Unknown character set: 'utf8mb4'",说明导出时用了 MySQL 8.0+ 特性,而本地 MySQL 是 5.7 —— 需在导出向导中取消勾选 Use utf8mb4 或手动替换 SQL 中所有 utf8mb4utf8
  • 导入后务必运行 SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_db'; 核对表数量,避免因外键顺序问题导致部分表没建成功

最常被忽略的是:Navicat Linux 版不读取 Windows 用户目录下的配置缓存,每次导入 XMI 后,必须手动点击 Model → Validate Model 才能刷新关系图——不点这一步,ER 图里连线全消失,但底层 SQL 实际已生效。

相关文章

精彩推荐