Me pregunto por qué git me dice esto :?
$ git diff MyFile.txt
diff --git a/MyFile.txt b/MyFile.txt
index d41a4f3..15dcfa2 100644
Binary files a/MyFile.txt and b/MyFile.txt differ
¿No son archivos de texto?
He comprobado los atributos .gitattributes y está vacío. ¿Por qué recibo este mensaje? Ya no puedo obtener diferencias como solía hacerlo
ADICIONAL:
He notado que hay un @
en los permisos de archivo, ¿qué es esto? Podría ser ésta la razón?
$ls -all
drwxr-xr-x 5 nacho4d staff 170 28 Jul 17:07 .
drwxr-xr-x 16 nacho4d staff 544 28 Jul 16:39 ..
-rw-r--r--@ 1 nacho4d staff 6148 28 Jul 16:15 .DS_Store
-rw-r--r--@ 1 nacho4d staff 746 28 Jul 17:07 MyFile.txt
-rw-r--r-- 1 nacho4d staff 22538 5 Apr 16:18 OtherFile.txt
ls
manual en Mac OS X: si el archivo o directorio tiene atributos extendidos, el campo de permisos impreso por la-l
opción va seguido de un@
carácter . Use la opción-@
para ver estos atributos extendidos.vger.kernel.org
listas, no tiene que suscribirse para publicar (las personas lo mantendrán en contacto con CC) para obtener respuestas) y se supone que no deben dar el volumen bastante alto de la[email protected]
lista.Respuestas:
Simplemente significa que cuando git inspecciona el contenido real del archivo (no sabe que ninguna extensión dada no es un archivo binario; puede usar el archivo de atributos si desea decirlo explícitamente; vea las páginas del manual).
Después de inspeccionar el contenido del archivo, ha visto cosas que no están en caracteres ascii básicos. Siendo UTF16, espero que tenga caracteres 'divertidos', por lo que cree que es binario.
Hay formas de decirle a git si tiene internacionalización (i18n) o formatos de caracteres extendidos para el archivo. No estoy suficientemente informado sobre el método exacto para configurar eso: es posible que necesite RT [Completo] M ;-)
Editar: una búsqueda rápida de SO encontró can-i-make-git-Recognize-a-utf-16-file-as-text que debería darle algunas pistas.
fuente
.gitattributes
)..gitattributes
etc.Si no ha establecido el tipo de archivo, Git intenta determinarlo automáticamente y un archivo con líneas realmente largas y quizás algunos caracteres anchos (por ejemplo, Unicode) se trata como binario. Con el archivo .gitattributes puede definir cómo Git interpreta el archivo. Establecer la diferencia atributo manualmente le permite a Git interpretar el contenido del archivo como texto y hará un diff habitual.
Simplemente agregue un atributo .gitattributes a su carpeta raíz del repositorio y establezca el atributo diff en las rutas o archivos. Aquí hay un ejemplo:
Si desea verificar si hay atributos establecidos en un archivo, puede hacerlo con la ayuda de git check-attr
Otra buena referencia sobre los atributos de Git se puede encontrar aquí .
fuente
diff
, notext
. Eltext
atributo no le dice a git que difiera usando texto, sino que controla cómo se manejan las terminaciones de línea (normalización a LF). Vea su enlace a .gitattributes para más detalles.diff=xml
lugar de solodiff
.Estaba teniendo este problema donde Git GUI y SourceTree trataban los archivos Java / JS como binarios y, por lo tanto, no podían ver la diferencia
Crear un archivo llamado "atributos" en la carpeta .git \ info con el siguiente contenido resolvió el problema
Si desea realizar este cambio para todos los repositorios, puede agregar el archivo de atributos en la siguiente ubicación $ HOME / .config / git / atributos
fuente
<project-root>/.gitattributes
archivo, que activa el cambio para todos los contribuyentes, y solo para el proyecto relevante.* diff
fue útil para mí: muestra la diferencia en todos los tipos de archivos. Pero su solución es mejor, porque evita mostrar las diferencias innecesarias en archivos binarios grandes.Git incluso determinará que es binario si tiene una línea súper larga en su archivo de texto. Rompí una cadena larga, convirtiéndola en varias líneas de código fuente, y de repente el archivo pasó de ser 'binario' a un archivo de texto que pude ver (en SmartGit).
Por lo tanto, no siga escribiendo demasiado a la derecha sin presionar 'Enter' en su editor; de lo contrario, Git pensará que ha creado un archivo binario.
fuente
Tuve el mismo problema después de editar uno de mis archivos en un nuevo editor. Resulta que el nuevo editor utilizó una codificación diferente (Unicode) que mi antiguo editor (UTF-8). Así que simplemente le dije a mi nuevo editor que guardara mis archivos con UTF-8 y luego git mostró mis cambios nuevamente y no lo vi como un archivo binario.
Creo que el problema era simplemente que git no sabe cómo comparar archivos de diferentes tipos de codificación. Por lo tanto, el tipo de codificación que usa realmente no importa, siempre que permanezca consistente.
No lo probé, pero estoy seguro de que si hubiera confirmado mi archivo con la nueva codificación Unicode, la próxima vez que realice cambios en ese archivo habría mostrado los cambios correctamente y no lo habría detectado como binario, ya que entonces habría estado comparando dos archivos codificados Unicode, y no un archivo UTF-8 con un archivo Unicode.
Puede usar una aplicación como Notepad ++ para ver y cambiar fácilmente el tipo de codificación de un archivo de texto; Abra el archivo en Notepad ++ y use el menú Codificación en la barra de herramientas.
fuente
He tenido el mismo problema Encontré el hilo cuando busco solución en google, aún no encuentro ninguna pista. Pero creo que encontré la razón después de estudiar, el siguiente ejemplo explicará claramente mi pista.
por ahora, el archivo new.txt se considera como un archivo de texto.
obtendrás este resultado
y prueba esto
llegarás abajo
fuente
Tuvimos este caso en el que un archivo .html se veía como binario cada vez que intentábamos hacer cambios en él. Muy frío para no ver diferencias. Para ser honesto, no verifiqué todas las soluciones aquí, pero lo que funcionó para nosotros fue lo siguiente:
git deletion
. Git diceDeleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
el archivo ahora se agrega como un archivo de texto normalDe ahora en adelante, cualquier cambio que hice en el archivo se ve como una diferencia de texto normal. También podría aplastar estas confirmaciones (1, 2 y 3 son el cambio real que realiza), pero prefiero poder ver en el futuro lo que hice. El aplastamiento 1 y 2 mostrará un cambio binario.
fuente
Según esta útil respuesta , puede preguntarle directamente a Git por qué trata un archivo de una manera particular:
Produce resultados útiles como este:
fuente
file
No es un comando git. Es una herramienta totalmente separada empaquetada con git en Windows. ¿Existe documentación que muestre que esto es lo que usa git para la detección de archivos binarios?Esto también es causado (al menos en Windows) por archivos de texto que tienen UTF-8 con codificación BOM . Cambiar la codificación a UTF-8 normal hizo que Git viera el archivo como tipo = texto
fuente
Tuve una instancia donde
.gitignore
contenía una\r
secuencia doble (retorno de carro) por propósito.Ese archivo fue identificado como binario por git. Agregar un
.gitattributes
archivo ayudó.fuente
Si
git check-attr --all -- src/my_file.txt
indica que su archivo está marcado como binario y no lo ha configurado como binario.gitattributes
, verifíquelo/.git/info/attributes
.fuente
Cambie Aux.js a otro nombre, como Sig.js.
El árbol fuente todavía lo muestra como un archivo binario, pero puede organizarlo (agregarlo) y confirmar.
fuente
Tuve un problema similar al pegar un texto de un mensaje binario de Kafka, que insertó caracteres no visibles y causó que git pensara que el archivo es binario.
Encontré los caracteres ofensivos buscando en el archivo usando expresiones regulares
[^ -~\n\r\t]+
.[
emparejar personajes en este conjunto^
coincide con los personajes que no están en este conjunto-~
coincide con todos los caracteres desde '' (espacio) hasta '~'\n
nueva línea\r
retorno de carro\t
lengüeta]
conjunto cerrado+
coincidir con uno o más de estos personajesfuente
Acabo de pasar varias horas revisando todo en esta lista tratando de averiguar por qué uno de los proyectos de prueba en mi solución no agregaba ninguna prueba al explorador.
Resultó en mi caso que de alguna manera (probablemente debido a una fusión pobre de git en alguna parte) que VS había perdido por completo una referencia al proyecto. Todavía estaba en construcción, pero noté que solo construía las dependencias.
Luego noté que no se mostraba en la lista de dependencias en sí, así que eliminé y volví a agregar el proyecto de prueba y todas mis pruebas aparecieron finalmente.
fuente