hg diff auf MySQL Workbench-Dateien

Ich binposting this as a Q & A, um eine Problemumgehung für ein Problem zu dokumentieren, das anscheinend häufig auftritt - wie MySQL Workbench-Dateien einer Versionskontrolle unterzogen werden -, für das ich jedoch keine Lösung gefunden habe. Feedback ist willkommen!

Wie kann ich Mercurial sagen,diff den Inhalt eines gezippten Archivs und einige der Änderungen an diesen Inhalten ignorieren? Wie kann ich konkret @ verwendehg um den Inhalt einer MySQL Workbench zu vergleichen .mwb) Datei, ignorieren Sie die vielen unwichtigen Änderungen, die MySQL Workbench bei jedem Öffnen der Datei vornimmt? Kann ich ein benutzerdefiniertes Skript verwenden, das bestimmte irrelevante Änderungen ignoriert?

Hintergrun

Ich versuche zudiff eine Datei in einem hg-Repository. Die Datei,document.mwb.xml, ist ein XML-Dokument, das aus einem @ extrahiert wur.mwb -Datei (eine MySQL Workbench-Modelldatei). Grundsätzlich möchte ich den Inhalt des Modells - die Tabellenstruktur, das visuelle Modell usw. - unter Versionskontrolle halten, aber nicht das @ festschreibe.mwb Datei selbst, die ein Zip-Archiv und damit eine Binärdatei ist.

Anytime speichere ich das.mwb Datei, entpacke ich es. Ich behalte die entpackten Inhalte in meinem Repository und packe sie einfach wieder hoch, wenn ich mit dem @ arbeiten mus.mwb in MySQL.

Das fragliche XML sieht folgendermaßen aus:

<?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">
...

Das Problem ist alle diese_ptr_ -Attribute: Diese Datei enthält buchstäblich Tausende von Attributen. Jedes dieser Attribute ändert sich jedes Mal, wenn die Datei gespeichert wird, auch wenn nichts geändert wird. Infolgedessen kann das Repository mit völlig bedeutungslosen "Änderungen" an dieser Datei schnell überfüllt sein.

Gibt es eine Möglichkeit, ein benutzerdefiniertes @ zu verwendediff Routine, um diese irrelevanten Änderungen zu ignorieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage