【发布时间】:2016-02-10 10:21:19
【问题描述】:
我是posting this as a Q&A 记录一个似乎经常出现的问题的解决方法——如何将 MySQL Workbench 文件置于版本控制之下——但我一直无法找到任何解决方案。欢迎反馈!
如何将压缩存档的内容告诉 Mercurial 给 diff,而忽略对这些内容的某些更改?具体来说,我如何使用hg 来区分 MySQL Workbench (.mwb) 文件的内容,而忽略 MySQL Workbench 每次打开文件时所做的许多不重要的更改?我可以使用忽略某些不相关更改的自定义脚本吗?
背景
我正在尝试diff hg 存储库中的文件。文件document.mwb.xml 是从.mwb 文件(MySQL Workbench 模型文件)中提取的XML 文档。基本上,我希望将模型的内容(表结构、可视模型等)保留在版本控制之下,但不提交 .mwb 文件本身,它是一个 zip 存档,因此是一个二进制文件。
每当我保存.mwb 文件时,我都会将其解压缩。我将解压缩的内容保存在我的存储库中,当我需要在 MySQL 中使用 .mwb 时,只需将它们重新压缩即可。
有问题的 XML 如下所示:
<?xml version="1.0"?>
<data grt_format="2.0" document_type="MySQL Workbench Model" version="1.4.4">
<value type="object" struct-name="workbench.Document" id="8551CCFA-3AD0-4207-BC76-15ED589CF22C" struct-checksum="0x7131bf99">
<value type="object" struct-name="workbench.logical.Model" id="B48E1CD2-3386-40B7-8E59-AA191598F667" struct-checksum="0xf4220370" key="logicalModel">
<value _ptr_="0x7fbcd1cc3270" type="list" content-type="object" content-struct-name="workbench.logical.Diagram" key="diagrams"/>
<value _ptr_="0x7fbcd1cc3210" type="dict" key="customData"/>
<value _ptr_="0x7fbcd1cc32d0" type="list" content-type="object" content-struct-name="model.Marker" key="markers"/>
<value _ptr_="0x7fbcd1cc3330" type="dict" key="options"/>
<value type="string" key="name"></value>
<link type="object" struct-name="GrtObject" key="owner">8551CCFA-3AD0-4207-BC76-15ED589CF22C</link>
</value>
<value _ptr_="0x7fbcd1cc2b70" type="list" content-type="object" content-struct-name="workbench.OverviewPanel" key="overviewPanels"/>
<value _ptr_="0x7fbcd1cc2c00" type="list" content-type="object" content-struct-name="workbench.physical.Model" key="physicalModels">
<value type="object" struct-name="workbench.physical.Model" id="34B9E967-5C9B-4D1B-8759-C417F6C33AA3" struct-checksum="0x5f896d18">
...
问题在于所有这些_ptr_ 属性:在这个文件中实际上有数千个属性,并且每次保存文件时它们都会更改,即使没有任何修改。因此,存储库很快就会被对该文件完全无意义的“更改”弄得一团糟。
有没有办法使用自定义的diff 例程来忽略这些不相关的更改?
【问题讨论】:
标签: xml mercurial diff mysql-workbench hgignore