192 votes

Pourquoi Git considère-t-il ce fichier texte comme un fichier binaire?

Je me demande pourquoi git me dit ça :?

 $ 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é les .gitattributes et il est vide. Pourquoi je reçois ce message? Je ne peux plus avoir de diffs comme je le faisais auparavant

AJOUTÉE:

J'ai remarqué qu'il y a @ dans les autorisations de fichiers, qu'est-ce que c'est? Cela pourrait-il être 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
 

100voto

Philip Oakley Points 3825

Cela signifie simplement que lorsque git inspecte le contenu réel du fichier (il ne doit pas savoir que toute extension n'est pas un fichier binaire - vous pouvez utiliser les attributs de fichier si vous voulez le dire explicitement - voir les pages de man).

Après avoir inspecté le contenu du fichier, il a vu des choses qui n'est pas dans la base de caractères ascii. Étant UTF16-je attendre qu'il aura "drôle" de caractères, donc il pense que c'est du binaire.

Il y a des façons de dire à git si vous avez l'internationalisation (i18n) ou un caractère étendu de formats de fichier. Je ne suis pas suffisamment sur la méthode exacte pour le réglage que vous devrez peut - être à la RT [] M ;-)

Edit: une recherche rapide de AINSI peut-on-faire-git-hommage-a-utf-16-fichier-texte qui devrait vous donner quelques indices.

50voto

naitsirch Points 747

Si vous n'avez pas défini le type de fichier, Git tente de déterminer automatiquement et un fichier avec de très longues lignes et peut-être que certains caractères larges (par exemple Unicode) est considéré comme binaire. Avec la .gitattributes fichier, vous pouvez définir comment Git (le fichier. Réglage de la diff attribut manuellement permet Git interpréter le contenu d'un fichier en tant que texte et en faire une habitude diff.

Il suffit d'ajouter une .gitattributes à votre dossier racine du référentiel et de définir les diff attribut pour les chemins d'accès ou des fichiers. Voici un exemple:

src/Acme/DemoBundle/Resources/public/js/i18n/* diff
doc/Help/NothingToSay.yml                      diff
*.css                                          diff

Si vous voulez vérifier si il y a des attributs définis dans un fichier, vous pouvez le faire avec l'aide de git check-attr

git check-attr --all -- src/my_file.txt

Une autre belle référence sur Git attributs peut être trouvé ici.

21voto

Chris Murphy Points 41

Git déterminera même que c'est binaire si vous avez une très longue ligne dans votre fichier texte. J'ai fait une longue chaîne de caractères sur plusieurs lignes de code source, et tout à coup le fichier est devenu «binaire» à un fichier texte visible (dans SmartGit).

16voto

deadlydog Points 1840

J'ai eu ce même problème après l'édition d'un de mes fichiers dans un nouveau rédacteur en chef. S'avère le nouvel éditeur a utilisé un codage différent (Unicode) que mon ancien éditeur (UTF-8). Donc j'ai simplement dit à mon nouvel éditeur pour enregistrer mes fichiers en UTF-8 puis git a montré mes changements de nouveau correctement et de ne pas le voir comme un fichier binaire.

Je pense que le problème était simplement que git ne sais pas comment faire pour comparer des fichiers de différents types de codage. Ainsi, le type d'encodage que vous utilisez n'a pas vraiment d'importance, tant qu'elle demeure constante.

Je n'ai pas tester, mais je suis sûr que si je viens de commettre mon fichier avec le nouveau codage Unicode, la prochaine fois que j'ai fait des modifications à ce fichier, il aurait montré les changements correctement et pas détecté comme binaire, depuis lors, il aurait été de la comparaison de deux codé en Unicode fichiers, et non pas un fichier UTF-8 d'un fichier Unicode.

Vous pouvez utiliser une application comme Notepad++ afin de voir facilement et de changer le type d'encodage d'un fichier texte; Ouvrir le fichier dans Notepad++ et utiliser l'Encodage de menu dans la barre d'outils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X