Dif personalizado para file git y binary

Tengo un formatting de file binary que incluyo en un repository git. Conozco el formatting de file del binary y posiblemente podría crear una herramienta similar para ellos que produciría un resultado de text para poder ver diferencias cuando miro un historial de git. Incluso podría crear una herramienta que podría tomar un file binary original, y el text diff y crear el nuevo file binary, de esa manera git no tendría que save el file binary una y otra vez con pequeños cambios.

Si tuviera que hacer este tipo de herramientas, ¿cómo podría integrarlo con git?

Solutions Collecting From Web of "Dif personalizado para file git y binary"

Desde la git help config :

  diff.external If this config variable is set, diff generation is not performed using the internal diff machinery, but using the given command. Can be overridden with the 'GIT_EXTERNAL_DIFF' environment variable. The command is called with parameters as described under "git Diffs" in git(1). Note: if you want to use an external diff program only on a subset of your files, you might want to use gitattributes(5) instead. 

gitattributes(5) también menciona un mecanismo llamado textconv : en lugar de suministrar un progtwig diff, usted suministra un progtwig que convierte su file binary a un resumen textual; los mecanismos de git diff normales se usan luego para presentar diffs de esos resúmenes textuales.

Editar : No sé de ninguna manera para hacer que las rutinas de empaque de objects de bajo nivel usen una herramienta de diferencias personalizada. Al leer entre las líneas de la página de manual de bajo nivel git-pack-objects(1) , parece probable que el formatting de package subyacente utilice un formatting de diferencia binaria, que de forma adaptativa busca un object existente para build un delta binary, de modo que para evitar almacenar todo el nuevo object. En este nivel, los objects (files) son simplemente blobs binarys, y creo que en todos los casos, excepto en los más oscuros, probablemente sea mejor tratar el material de empaque del object como un detalle de implementación.

En otras palabras, si tus objects binarys son similares entre sí en el nivel binary, git los representará de manera eficiente. Los casos comunes que puedo imaginar donde esto no sería cierto son los files comprimidos y encriptados.