J'ai rencontré un problème similaire.
Je voudrais améliorer la réponse acceptée, car elle a un petit défaut. Le problème que je suis tombé sur était que si le fichier n'existait pas, j'ai reçu cette erreur:
conversion to cannot unsupported
J'ai changé les commandes de sorte qu'un fichier ne soit pas nécessaire. Il utilise seulement stdin/stdout. Cela a corrigé le problème. Mon fichier .git/config ressemble maintenant à ceci:
[filter "mixedtext"]
clean = "GITTMP=$(mktemp);TYPE=$(tee $GITTMP|file -b --mime-encoding -); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP"
smudge = "GITTMP=$(mktemp);TYPE=$(tee $GITTMP|file -b --mime-encoding -); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP"
required = true
Pour créer les entrées dans votre .git/config utiliser ces commandes:
git config --replace-all filter.mixedtext.clean 'GITTMP=$(mktemp);TYPE=$(tee $GITTMP|file -b --mime-encoding -); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP'
git config --replace-all filter.mixedtext.smudge 'GITTMP=$(mktemp);TYPE=$(tee $GITTMP|file -b --mime-encoding -); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP'
git config --replace-all filter.mixedtext.required true
Mon fichier .gitattributes ressemble à ceci:
*.txt filter=mixedtext
*.ps1 filter=mixedtext
*.sql filter=mixedtext
Spécifiez uniquement les fichiers pouvant poser un problème, sinon le nettoyage/nettoyage doit effectuer plus de travail (fichiers temporaires).
Nous avons également converti en vrac les fichiers UTF-16le en git en UTF-8 car il s'agit de l'encodage le plus compact et portable pour UTF. La même commande iconv utilisée dans clean et smudge était parfaite pour convertir en permanence les fichiers. La bonne chose à propos des commandes clean/smudge est que même si un fichier est enregistré avec, disons, UTF-16le, le diff fonctionnera toujours.
pouvez-vous confirmer si cette solution s'applique rétrospectivement pour les commits précédents? J'ai essayé ceci et mes modifications aux fichiers UTF-16 ne s'affichent toujours pas dans l'outil 'gitk' de msysgit. – Adam
cela semble échouer quand je fais une «traction git» qui comprend les fichiers supprimés par un autre utilisateur git. Je reçois l'erreur msg de iconv: 'conversion en can not unsupported' ... y a-t-il un moyen d'empêcher l'exécution de ce filtre sur les fichiers supprimés? – Adam
J'utilise cette solution depuis longtemps et cela fonctionne parfaitement pour msysgit jusqu'à 1.9.5 sur Windows. Dans le dernier Git 2.x, il n'y a plus de fichier '.gitattributes'. Avez-vous une solution qui fonctionne également dans la dernière version de Git? – Adam