Je me demande pourquoi git me dit ceci:?
$ 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
Ne sont-ils pas des fichiers texte?
J'ai vérifié le .gitattributes et il est vide. Pourquoi je reçois ce message? Je ne peux plus avoir de diffs comme je le faisais
AJOUTÉE:
J'ai remarqué qu'il y a une @
autorisation dans le fichier, qu'est-ce que c'est? Serait-ce la raison?
$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
page de manuel sous Mac OS X: Si le fichier ou le répertoire possède des attributs étendus, le champ des autorisations imprimé par l'-l
option est suivi d'un@
caractère . Utilisez l'option-@
pour voir ces attributs étendus.vger.kernel.org
listes, vous n'êtes pas obligé de vous abonner pour publier (les gens vous garderont CC pour les réponses) et sont en quelque sorte censés ne pas être compte tenu du volume assez élevé de la[email protected]
liste.Réponses:
Cela signifie simplement que lorsque git inspecte le contenu réel du fichier (il ne sait pas qu'une extension donnée n'est pas un fichier binaire - vous pouvez utiliser le fichier d'attributs si vous voulez le dire explicitement - voir les pages de manuel).
Après avoir inspecté le contenu du fichier, il a vu des éléments qui ne sont pas en caractères ascii de base. Étant UTF16, je m'attends à ce qu'il ait des caractères «drôles», donc il pense que c'est binaire.
Il existe des moyens de dire à git si vous avez des formats d'internationalisation (i18n) ou de caractères étendus pour le fichier. Je ne suis pas suffisamment au fait de la méthode exacte pour définir cela - vous devrez peut-être RT [Full] M ;-)
Edit: une recherche rapide de SO a trouvé can-i-make-git-Recogn-a-utf-16-file-as-text qui devrait vous donner quelques indices.
la source
.gitattributes
)..gitattributes
etc.Si vous n'avez pas défini le type d'un fichier, Git essaie de le déterminer automatiquement et un fichier avec de très longues lignes et peut-être des caractères larges (par exemple Unicode) est traité comme binaire. Avec le fichier .gitattributes , vous pouvez définir comment Git interprète le fichier. La définition manuelle de l'attribut diff permet à Git d'interpréter le contenu du fichier comme du texte et effectuera un diff habituel.
Ajoutez simplement un .gitattributes au dossier racine de votre référentiel et définissez l' attribut diff sur les chemins ou les fichiers. Voici un exemple:
Si vous voulez vérifier s'il y a des attributs définis sur un fichier, vous pouvez le faire à l'aide de git check-attr
Une autre référence intéressante sur les attributs Git peut être trouvée ici .
la source
diff
pastext
. L'text
attribut ne dit pas à git de diff en utilisant du texte, mais contrôle à la place la manière dont les fins de ligne sont gérées (normalisation à LF). Voir votre lien vers .gitattributes pour plus de détails.diff=xml
au lieu de simplementdiff
.J'avais ce problème où Git GUI et SourceTree traitaient les fichiers Java / JS comme binaires et ne pouvaient donc pas voir la différence
La création d'un fichier nommé "attributs" dans le dossier .git \ info avec le contenu suivant a résolu le problème
Si vous souhaitez effectuer cette modification pour tous les référentiels, vous pouvez ajouter un fichier d'attributs à l'emplacement suivant $ HOME / .config / git / attributes
la source
<project-root>/.gitattributes
fichier, qui rend la modification active pour tous les contributeurs, et uniquement pour le projet concerné.* diff
été utile pour moi: cela montre la différence dans tous les types de fichiers. Mais votre solution est meilleure, car vous évitez d'afficher les différences inutiles dans les gros fichiers binaires.Git déterminera même qu'il s'agit d'un binaire si vous avez une très longue ligne dans votre fichier texte. J'ai brisé une longue chaîne, la transformant en plusieurs lignes de code source, et tout à coup le fichier est passé du statut de «binaire» à un fichier texte que je pouvais voir (dans SmartGit).
Donc, ne continuez pas à taper trop à droite sans appuyer sur «Entrée» dans votre éditeur - sinon plus tard, Git pensera que vous avez créé un fichier binaire.
la source
J'ai eu ce même problème après avoir édité un de mes fichiers dans un nouvel éditeur. Il s'avère que le nouvel éditeur utilisait un encodage différent (Unicode) de mon ancien éditeur (UTF-8). J'ai donc simplement dit à mon nouvel éditeur de sauvegarder mes fichiers avec UTF-8, puis git a montré à nouveau mes modifications correctement et ne l'a pas vu comme un fichier binaire.
Je pense que le problème était simplement que git ne savait pas comment comparer des fichiers de différents types d'encodage. Ainsi, le type d'encodage que vous utilisez n'a pas vraiment d'importance, tant qu'il reste cohérent.
Je ne l'ai pas testé, mais je suis sûr que si je venais de valider mon fichier avec le nouvel encodage Unicode, la prochaine fois que j'apporterais des modifications à ce fichier, il aurait montré les modifications correctement et ne les aurait pas détectées comme binaire, car alors il aurait comparé deux fichiers encodés Unicode, et non un fichier UTF-8 à un fichier Unicode.
Vous pouvez utiliser une application comme Notepad ++ pour voir et modifier facilement le type d'encodage d'un fichier texte; Ouvrez le fichier dans Notepad ++ et utilisez le menu Encodage dans la barre d'outils.
la source
J'ai eu le même problème. J'ai trouvé le fil de discussion lorsque je recherche une solution sur Google, mais je ne trouve toujours aucun indice. Mais je pense avoir trouvé la raison après avoir étudié, l'exemple ci-dessous expliquera clairement mon indice.
pour l'instant, le fichier new.txt est considéré comme un fichier texte.
vous obtiendrez ce résultat
et essayez ça
vous obtiendrez ci-dessous
la source
Nous avons eu ce cas où un fichier .html était considéré comme binaire chaque fois que nous essayions d'y apporter des modifications. Très pas cool de ne pas voir les diffs. Pour être honnête, je n'ai pas vérifié toutes les solutions ici, mais ce qui a fonctionné pour nous était le suivant:
git deletion
. Git ditDeleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
le fichier est maintenant ajouté en tant que fichier texte normalÀ partir de maintenant, toutes les modifications que j'ai apportées au fichier sont considérées comme un diff de texte normal. Vous pouvez également écraser ces commits (1, 2 et 3 étant le changement réel que vous apportez) mais je préfère pouvoir voir à l'avenir ce que j'ai fait. Écraser 1 et 2 affichera un changement binaire.
la source
Selon cette réponse utile , vous pouvez demander directement à Git pourquoi il traite un fichier d'une manière particulière:
Il produit une sortie utile comme celle-ci:
la source
file
n'est pas une commande git. C'est un outil totalement séparé fourni avec git sur Windows. Existe-t-il une documentation montrant que c'est ce que git utilise pour la détection de fichiers binaires?Cela est également causé (au moins sous Windows) par des fichiers texte qui ont UTF-8 avec encodage BOM . En changeant l'encodage en UTF-8 normal, Git voit immédiatement le fichier comme type = text
la source
J'ai eu une instance où
.gitignore
contenait un double\r
séquence (retour chariot) par but.Ce fichier a été identifié comme binaire par git. L'ajout d'un
.gitattributes
fichier a aidé.la source
Si cela
git check-attr --all -- src/my_file.txt
indique que votre fichier est marqué comme binaire et que vous ne l'avez pas défini comme binaire dans.gitattributes
, vérifiez-le/.git/info/attributes
.la source
Remplacez Aux.js par un autre nom, comme Sig.js.
L'arborescence source l'affiche toujours sous forme de fichier binaire, mais vous pouvez la mettre en scène (l'ajouter) et la valider.
la source
J'ai eu un problème similaire en collant du texte à partir d'un message binaire Kafka, qui insérait un caractère non visible et faisait croire à git que le fichier était binaire.
J'ai trouvé les caractères incriminés en recherchant le fichier à l'aide de regex
[^ -~\n\r\t]+
.[
faire correspondre les caractères de cet ensemble^
correspond à des caractères n'appartenant pas à cet ensemble-~
correspond à tous les caractères de '' (espace) à '~'\n
nouvelle ligne\r
retour chariot\t
languette]
fermer l'ensemble+
correspond à un ou plusieurs de ces caractèresla source
Je viens de passer plusieurs heures à parcourir tout ce qui figure sur cette liste à essayer de comprendre pourquoi l'un des projets de test de ma solution n'ajoutait aucun test à l'explorateur.
Il s'est avéré dans mon cas que d'une manière ou d'une autre (probablement en raison d'une mauvaise fusion git quelque part) que VS avait complètement perdu une référence au projet. Il était encore en construction mais j'ai remarqué qu'il ne construisait que les dépendances.
J'ai ensuite remarqué qu'il n'apparaissait pas dans la liste des dépendances elle-même, alors j'ai supprimé et rajouté le projet de test et tous mes tests sont finalement apparus.
la source