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 avant
AJOUTÉE:
J'ai remarqué qu'il y a un @
dans les autorisations de fichier, 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
Cela signifie simplement que lorsque git inspecte le contenu réel du fichier (il ne sait pas ) que toute 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 détecté des éléments qui ne sont pas en caractères ascii de base. Étant UTF16, je pense qu’il aura des caractères "drôles", donc il pense que c’est binaire.
Il y a moyen de dire à git si vous avez des formats de caractères d'internationalisation (i18n) ou étendus pour le fichier. Je ne suis pas suffisamment au courant de la méthode exacte pour régler cela - vous devrez peut-être RT [Full] M ;-)
Édition: une recherche rapide de SO trouvé peut-être-rendu-git-reconnaître-un-utf-16 fichier-as-texte qui devrait donner vous quelques indices.
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 wide (par exemple, Unicode) est traité comme binaire. Avec le fichier .gitattributes vous pouvez définir comment Git interprète le fichier. Définir l'attribut diff manuellement permet à Git d'interpréter le contenu du fichier sous forme de texte et fera 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:
src/Acme/DemoBundle/Resources/public/js/i18n/* diff
doc/Help/NothingToSay.yml diff
*.css diff
Si vous voulez vérifier si des attributs sont définis sur un fichier, vous pouvez le faire à l'aide de git check-attr
git check-attr --all -- src/my_file.txt
Une autre référence intéressante sur les attributs de Git pourrait être trouvée ici .
Git déterminera même que c'est binaire si vous avez une très longue ligne dans votre fichier texte. J'ai rompu une longue chaîne en la transformant en plusieurs lignes de code source. Soudain, le fichier est passé de «binaire» à un fichier texte visible (dans SmartGit).
Donc, ne continuez pas à taper trop à droite sans appuyer sur 'Entrée' dans votre éditeur - sinon, Git pensera plus tard que vous avez créé un fichier binaire.
J'avais ce problème où Git GUI et SourceTree traitaient les fichiers Java/JS comme des fichiers binaires et ne pouvaient donc pas voir la différence
La création du fichier nommé "attributs" dans le dossier .git\info avec le contenu suivant a résolu le problème.
*.Java diff
*.js diff
*.pl diff
*.txt diff
*.ts diff
*.html diff
Si vous souhaitez apporter cette modification à tous les référentiels, vous pouvez ajouter un fichier d'attributs à l'emplacement suivant $ HOME/.config/git/attributs
J'ai eu ce même problème après l'édition de l'un de mes fichiers dans un nouvel éditeur. Il s'avère que le nouvel éditeur utilise un codage (Unicode) différent de celui de mon ancien éditeur (UTF-8). Donc, j'ai simplement dit à mon nouvel éditeur de sauvegarder mes fichiers avec UTF-8, puis git a montré à nouveau correctement mes modifications 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 types de codage différents. Ainsi, le type de codage 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 nouveau codage Unicode, la prochaine fois que j'apporterais des modifications à ce fichier, il aurait montré les modifications correctement et ne l'avait pas détecté comme binaire, car il aurait alors comparé deux fichiers codés Unicode, et non un fichier UTF-8 à un fichier Unicode.
Vous pouvez utiliser une application telle que Notepad ++ pour voir et modifier facilement le type d'encodage d'un fichier texte. Ouvrez le fichier dans Notepad ++ et utilisez le menu Encodage de la barre d’outils.
J'ai eu le même problème. J'ai trouvé le fil quand je cherche 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.
echo "new text" > new.txt
git add new.txt
git commit -m "dummy"
pour le moment, le fichier new.txt est considéré comme un fichier texte.
echo -e "newer text\000" > new.txt
git diff
vous obtiendrez ce résultat
diff --git a/new.txt b/new.txt
index fa49b07..410428c 100644
Binary files a/new.txt and b/new.txt differ
et essayez ceci
git diff -a
vous obtiendrez ci-dessous
diff --git a/new.txt b/new.txt
index fa49b07..9664e3f 100644
--- a/new.txt
+++ b/new.txt
@@ -1 +1 @@
-new file
+newer text^@
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 a été le suivant:
git deletion
. Git dit Deleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
Le fichieris est maintenant ajouté en tant que fichier texte normalA partir de maintenant, toute modification apportée au fichier est considérée comme un diff texte normal. Vous pouvez également écraser ces commits (1, 2 et 3 étant le changement que vous effectuez), mais je préfère pouvoir voir à l'avenir ce que j'ai fait. Squashing 1 & 2 affichera un changement binaire.
Per cette réponse utile , vous pouvez demander directement à Git pourquoi il traite un fichier de manière particulière:
cd directory/of/interest
file *
Il produit une sortie utile comme ceci:
$ file *
CR6Series_stats resaved.dat: ASCII text, with very long lines, with CRLF line terminators
CR6Series_stats utf8.dat: UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators
CR6Series_stats.dat: ASCII text, with very long lines, with CRLF line terminators
readme.md: ASCII text, with CRLF line terminators
J'ai eu un exemple où .gitignore
contenait une double séquence \r
(retour chariot) par but.
Ce fichier a été identifié comme étant binaire par git. L'ajout d'un fichier .gitattributes
a aidé.
# .gitattributes file
.gitignore diff
Cela est également causé (au moins sous Windows) par des fichiers texte comportant UTF-8 avec codage BOM . Changer l'encodage en normal UTF-8 immédiatement fait en sorte que Git voit le fichier comme type = text
Si 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
, recherchez-le dans /.git/info/attributes
.
Remplacez le fichier Aux.js par un autre nom, comme Sig.js.
L’arborescence source l’a toujours sous forme de fichier binaire, mais vous pouvez l’ajouter (étape) et la valider.