¿Es bueno git con archivos binarios?
Si tengo muchos archivos sin comprimir que se están modificando y muchos archivos comprimidos nunca (o casi nunca) se modifican, ¿git lo manejaría bien? Por ejemplo, si inserto o elimino el medio e inserto datos cerca del final, ¿lo notará como lo hace con el texto?
Si git no es bueno con archivos binarios, ¿qué herramienta debería considerar?
Respuestas:
Fuera de la caja, git puede agregar fácilmente archivos binarios a su índice y también almacenarlos de manera eficiente a menos que realice actualizaciones frecuentes en archivos grandes no comprimibles.
Los problemas comienzan cuando git necesita generar diferencias y fusiones: git no puede generar diferencias significativas ni fusionar archivos binarios de ninguna manera que tenga sentido. Entonces, todas las fusiones, rebases o selecciones que involucran un cambio en un archivo binario implicarán que realice una resolución manual de conflictos en ese archivo binario.
Debe decidir si los cambios en el archivo binario son lo suficientemente raros como para poder vivir con el trabajo manual adicional que causan en el flujo de trabajo normal de git que involucra fusiones, rebases, selecciones.
fuente
git diff --binary
podrá parchear archivos binarios.Además de otras respuestas.
Puede enviar una diferencia a un archivo binario utilizando el llamado formato de diferencia binaria . No es legible por humanos, y solo se puede aplicar si tiene una preimagen exacta en su repositorio, es decir, sin ningún problema.
Un ejemplo:
Puede usar textconv gitattribute para
git diff
mostrar diferencias legibles por humanos para archivos binarios o partes de archivos binarios. Por ejemplo, para archivos * .jpg puede haber una diferencia en la información EXIF, para los archivos PDF puede ser una diferencia entre su representación de texto (pdf2text o algo así).HTH.
fuente
Si tiene archivos binarios realmente grandes, puede usar git-Annex para almacenar los datos fuera del repositorio. Consulte: http://git-annex.branchable.com/
fuente
No conozco ninguna herramienta que intente almacenar diferencias de archivos binarios para el control de versiones, pero vale la pena señalar que Git no hace esto ni siquiera para archivos de texto. Git almacena archivos como blobs y hace una diferencia entre ellos cuando es necesario.
Si está buscando hacer un control de versiones en algo como documentos de Photoshop / Illustrator, GridIron Flow podría ser el truco para usted. Si está tratando de mantenerlos sincronizados entre máquinas, Dropbox o Rsync pueden manejarlo, pero no van a hacer diferencias inteligentes.
fuente
git gc
para hacer la recolección de basura. De la misma página: "Dado que Git almacena cada versión de cada archivo como un objeto separado, puede volverse bastante ineficiente. Imagínese tener un archivo de varios miles de líneas y cambiar una sola línea. Git almacenará el segundo archivo en su totalidad, lo que es una gran pérdida de espacio ".git gc
: "Se anima a los usuarios a ejecutar esta tarea de forma regular dentro de cada repositorio para mantener una buena utilización del espacio en disco y un buen rendimiento operativo. Algunos comandos de git pueden ejecutar automáticamente git gc; consulte la marca --auto a continuación para obtener más detalles . "Bueno, git es bueno con los binarios. Pero no manejará binarios como archivos de texto. Es como si quisieras fusionar archivos binarios. Quiero decir, una diferencia en un jpeg nunca te devolverá nada. Git funciona muy bien con archivos de texto y probablemente tan mal como cualquier otra solución con archivos binarios.
fuente
si desea una solución para el control de versiones, puede considerar git-lfs que tiene un puntero ligero a su archivo.
significa que cuando clona su repositorio, no descarga todas las versiones, sino solo la que está extraída.
Aquí hay un buen tutorial de cómo usarlo.
fuente