hg diff nos arquivos MySQL Workbench

Eu estoupostando isso como um Q&A documentar uma solução alternativa para um problema que parece surgir com freqüência - como colocar os arquivos do MySQL Workbench sob controle de versão - mas para os quais não consegui encontrar nenhuma solução. Comentários são bem-vindos!

Como posso dizer ao Mercurial paradiff o conteúdo de um arquivo compactado e ignorar algumas das alterações nesses conteúdos? Especificamente, como posso usarhg para diferenciar o conteúdo de um MySQL Workbench (.mwb), ignorando as muitas alterações sem importância que o MySQL Workbench faz toda vez que o arquivo é aberto? Posso usar um script personalizado que ignore certas alterações irrelevantes?

fundo

estou tentandodiff um arquivo em um repositório hg. O arquivo,document.mwb.xml, é um documento XML extraído de um.mwb (um arquivo de modelo do MySQL Workbench). Basicamente, pretendo manter o conteúdo do modelo - a estrutura da tabela, o modelo visual etc. - sob controle de versão, mas não comprometer o.mwb próprio arquivo, que é um arquivo zip e, portanto, um arquivo binário.

Sempre que eu salvar o.mwb descompacte-o. Eu mantenho o conteúdo descompactado no meu repositório e apenas os fecho novamente quando preciso trabalhar com o.mwb no MySQL.

O XML em questão se parece com o seguinte:

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

O problema é todos aqueles_ptr_ atributos: existem literalmente milhares deles neste arquivo e cada um deles muda toda vez que o arquivo é salvo, mesmo que nada seja modificado. Como resultado, o repositório pode ficar rapidamente cheio de "alterações" completamente sem sentido nesse arquivo.

Existe uma maneira de usar um costumediff rotina para ignorar essas mudanças irrelevantes?

questionAnswers(1)

yourAnswerToTheQuestion