J'ai vu plusieurs questions demandant comment faire git traiter un fichier texte comme binaire, mais je n'ai pas encore vu le contraire:
Comment puis-je changer le choix de git de traiter un fichier texte comme binaire? J'ai un fichier texte où dans certaines chaînes de configuration, un EOT et ETX est utilisé pour séparer des parties des paramètres de configuration.
Par exemple, le code source contient des lignes comme celle-ci:
INPUT 'ScrollRemote[EOT]no[ETX]NumDown[EOT]0[ETX]CalcWidth[EOT]no[ETX]MaxWidth[EOT]80[ETX]FetchOnReposToEnd[EOT]yes[ETX].....'
La façon dont les fichiers sont réellement stockés dans le référentiel Git n'est pas pertinente pour la façon dont ils sont traités lorsqu'ils sont affichés. Alors le git diff
, lorsqu'on lui demande de comparer deux fichiers, obtient d'abord les deux fichiers complets du référentiel, puis exécute un algorithme de différence par rapport à eux.
Normalement, git diff
recherche des caractères non imprimables dans les fichiers et s'il ressemble au fichier comme étant probablement un fichier binaire, il refuse de montrer la différence . La raison en est que les différences de fichiers binaires ne seront probablement pas lisibles par l'homme et gâcheront probablement votre terminal si elles sont affichées.
Cependant, vous pouvez demander à git diff
pour toujours traiter les fichiers comme du texte à l'aide de --text
option. Vous pouvez le spécifier pour une commande diff
:
git diff --text HEAD HEAD^ file.txt
Vous pouvez faire en sorte que Git utilise toujours cette option en configurant un .gitattributes
fichier contenant:
file.txt diff
L'attribut diff
signifie ici:
Un chemin sur lequel l'attribut
diff
est défini est traité comme du texte, même lorsqu'il contient des valeurs d'octets qui n'apparaissent normalement jamais dans les fichiers texte, tels que NUL.
Regardez Git Attributes - ils peuvent vous aider en spécifiant qu'une certaine extension de fichier doit être traitée comme du texte.
Si vous essayez de comparer ou de fusionner des fichiers texte et que git dit que ce sont des fichiers binaires, ils peuvent simplement avoir un codage différent (par exemple UTF-8 et ANSI). Voir le réponse que j'ai donnée sur ce post .