Para diferir archivos binarios en git, supongo que necesito configurar un difftool.
¿Qué herramientas de trabajo funcionan? ¿Cómo se ponen los parámetros?
Para diferir archivos binarios en git, supongo que necesito configurar un difftool.
¿Qué herramientas de trabajo funcionan? ¿Cómo se ponen los parámetros?
Respuestas:
Puede establecer una textconv
opción de configuración para un tipo de archivo. Consulte "Realización de diferencias de texto de archivos binarios" en gitattributes (5) . Lo que debe usar depende del tipo de archivo.
Ejemplo 1 :
Digamos que desea diferenciar el contenido de los archivos zip. En ese caso, debe poner lo siguiente en el archivo $ GIT_DIR / config o $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
La próxima vez que solicite un archivo diff en un archivo zip en un repositorio, solicitará unzip -v
en ambas versiones y el texto resultante.
Ejemplo 2 :
Para archivos pdf, puede usar, por ejemplo pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
Ejemplo 3 :
Si no hay una utilidad de información específica para un tipo de archivo, podría usar, por ejemplo, hexdump
(viene con FreeBSD y OSX, también disponible en Linux):
[diff "bin"]
textconv = hexdump -v -C
La respuesta de Roland Smith fue útil, pero actualmente está incompleta (vea los comentarios): hay dos partes en esto.
Puede definir un nuevo comando diff en el .git/config
archivo de su repositorio o en su ~/.gitconfig
archivo global personal , por ejemplo un comando hex diff utilizando hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
A continuación, debe usar el .gitattributes
archivo del repositorio para decirle a git qué archivos se deben usar con este comando de diferencia especial:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Al igual que el .gitignore
archivo, el .gitattributes
archivo debe registrarse en su repositorio.
En mi caso, tengo varias extensiones de archivo diferentes que quiero tratar como binarias (por ejemplo, evitar las conversiones de final de línea si se usa git en Windows), y también veo diferencias a través de hexdump
:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
Consulte también https://github.com/resin-io/etcher/pull/1367 para ver otro ejemplo que define un comando hexdump diff para usar con archivos de imagen.
.gitattributes
global (para ir junto con las [diff]
entradas en su global .gitconfig
). Si hace .gitattributes
que el repositorio sea local, entonces el usuario tendrá que modificar su .gitconfig
configuración de repositorio local porque, por razones de seguridad, no se enviarán al control remoto. De cualquier manera, cada usuario tiene que actualizar sus archivos / configuraciones locales de alguna manera para habilitar este comportamiento. En .gitconfig
debajo de [core]
agregar attributesfile = c:/users/<username>/.gitattributes
o donde desee almacenarlo si lo hace global (tenga en cuenta las barras hacia adelante, incluso en ventanas).
Lo anterior son formas completas de hacerlo. Sin embargo, si solo necesita hacerlo para algunos archivos, el siguiente método es el que utilizo:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Aquí estoy usando vimdiff
pero puedes usar cualquier otra herramienta. Lo anterior también se puede combinar en un pequeño script si necesita hacer esto una y otra vez.