git a récemment commencé à comprendre les encodages tels que utf16. Consultez la documentation de gitattributes , recherchezworking-tree-encoding
[Assurez-vous que votre page de manuel correspond, car c'est assez nouveau!]
Si (disons) le fichier est UTF-16 sans BOM sur une machine Windows, ajoutez-le à votre .gitattributes
fichier
*.vmc text working-tree-encoding=UTF-16LE eol=CRLF
Si UTF-16 (avec bom) sur * nix, faites-le:
*.vmc text working-tree-encoding=UTF-16-BOM eol=LF
(Remplacez *.vmc
par *.whatever
pour whatever
les fichiers de type que vous devez gérer)
Voir: Prise en charge de l'encodage de l'arbre de travail "UTF-16LE-BOM" .
Ajouté plus tard
Suite à @Hackslash, on peut trouver que c'est insuffisant
*.vmc text working-tree...
Pour obtenir de belles différences de texte dont vous avez besoin
*.vmc diff working-tree...
Mettre les deux fonctionne aussi bien
*.vmc text diff working-tree...
Mais c'est sans doute
- Redondant -
eol=...
impliquetext
- Verbose - un grand projet pourrait facilement avoir des dizaines de types de fichiers texte différents
Le problème
Git a un macro-attribut binary
qui signifie -text -diff
. Le contraire +text +diff
n'est pas disponible intégré mais git donne les outils (je pense!) Pour le synthétiser
La solution
Git permet de définir de nouveaux attributs de macro.
Je proposerais que le haut du .gitattributes
fichier que vous avez
[attr]textfile text diff
Ensuite, pour tous les chemins qui doivent être du texte et des différences, faites
path textfile working-tree-encoding= eol=...
Notez que dans la plupart des cas, nous souhaitons l'encodage par défaut (utf-8) et l'eol par défaut (natif) et peuvent donc être supprimés.
La plupart des lignes devraient ressembler à
textfile *.c
textfile *.py
Etc
Pourquoi ne pas simplement utiliser diff?
Pratique: dans la plupart des cas, nous voulons des eol natifs. Ce qui veut dire non eol=...
. Donc text
, ne sera pas implicite et doit être mis explicitement.
Conceptuel: Texte Vs binaire est la distinction fondamentale. eol, encoding, diff, etc. n'en sont que quelques-uns.
Avertissement
En raison des moments bizarres dans lesquels nous vivons, je n'ai pas de machine avec un git de travail actuel. Je suis donc incapable pour le moment de vérifier le dernier ajout. Si quelqu'un trouve quelque chose qui ne va pas, j'effacerai / supprimerai.