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