Git et le Tréma problème sur Mac OS X
Aujourd'hui, j'ai découvert un bug pour Git sous Mac OS X.
Par exemple, je vais commettre un fichier avec le nom de überschrift.txt avec l'allemand caractère spécial Ü au début. À partir de la commande git status
je obtenir la sortie suivante.
Users-iMac: user$ git status
On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# "U40berschrift.txt"
nothing added to commit but untracked files present (use "git add" to track)
Il semble que Git 1.7.2 a un problème avec l'allemand caractères spéciaux sur Mac OS X.
Est-il une solution pour obtenir Git lire les noms de fichier correct?
- Voir aussi commit 3a59e59 (01 Juillet 2015) par le Karsten Blees (
kblees
). (Fusionnés par Junio C Hamano --gitster
-- en commit 81bc521, 03 Août 2015)
Vous devez vous connecter pour publier un commentaire.
Permettre de base.precomposeunicode sur le mac
Pour que cela fonctionne, vous devez avoir au moins Git 1.8.2.
Mountain Lion est livré avec 1.7.5. Pour obtenir une version plus récente de git soit utiliser git-osx-installer ou homebrew (nécessite Xcode).
Que c'est.
git config --global core.precomposeunicode false
). Je suis sous OS X 10.9.2 et Git 1.8.5.2, avec les fichiers stockés sur une image de disque avec le système de fichier HFS+. Se pourrait-il qu'Apple a changé leur mise en œuvre?false
sur OS X 10.10 et Git 2.0.0. Je n'ai pas de clone, ni la caisse de nouveau. Il a juste travaillé.--global
.La cause en est la mise en œuvre différente de la façon dont le système de fichiers stocke le nom du fichier.
En Unicode, Ü peut être représenté de deux façons, on est par Ü seul, l'autre est par U + "combinant tréma caractère". Une chaîne Unicode peut contenir à la fois des formes, mais comme c'est déroutant à la fois, le système de fichiers normalise la chaîne unicode en définissant chaque umlauted-U et Ü, ou U + "combinant tréma caractère".
Linux utilise la première méthode, appelée Forme Normale-Composé (ou NFC), et Mac OS X utilise la deuxième méthode, appelée Forme Normale Décomposé (DNF).
Apparemment Git ne se soucie pas de ce point et utilise simplement la séquence d'octets du fichier, ce qui conduit au problème que vous rencontrez.
La liste de diffusion thread Git, Mac OS X et allemand caractères spéciaux a un patch en sorte que Git compare les noms de fichiers après la normalisation.
La suite à mettre dans ~/.gitconfig fonctionne pour moi sur la gestion 10.12.1 Sierra pour l'UTF-8 noms:
La première option est nécessaire pour que git 'comprend' UTF-8 et la deuxième, de sorte qu'il ne peut pas échapper les caractères.
De faire
git add file
travail avec les accents dans les noms de fichiers sur Mac OS X, vous pouvez convertir le fichier en un chemin de chaînes à partir de composés dans canoniquement décomposé en UTF-8 à l'aideiconv
.Modifier le référentiel OSX spécifiques
core.precomposeunicode
drapeau de vrai:De faire en sorte que les nouveaux référentiels d'obtenir le drapeau, aussi:
Voici les extrait de la page de manuel:
Il est correct.
Votre nom de fichier est en UTF-8, Ü être représenté comme LETTRE LATINE majuscule U + COMBINANT la DIÉRÈSE (Unicode 0x0308, utf8 0xcc 0x88) au lieu de la LETTRE majuscule LATINE U TRÉMA (Unicode 0x00dc, utf8 0xc3 0x9c). Le Mac OS X système de fichiers HFS, se décompose Unicode dans une telle manière. Git à son tour montre la octal-échapper à la forme de la non-ASCII nom de fichier octets.
Noter que les noms de fichiers Unicode peut rendre votre référentiel non-portable. Par exemple, msysgit a eu des problèmes avec des noms de fichiers Unicode.
J'ai eu le même problème avec mon propre référentiel, j'ai donc écrit un script d'aide avec Python 3. Vous pouvez saisir ici: https://github.com/sjtoik/umlaut-cleaner
Le script a besoin d'un peu de travail manuel, mais pas beaucoup.