update tutorial tag tab name how commits commands git macos versioning

tutorial - Problema de Git y Umlaut en Mac OS X



git tag name (7)

Cambie el indicador core.precomposeunicode específico del OSX del repositorio a verdadero:

git config core.precomposeunicode.true

Para asegurarse de que los nuevos repositorios obtengan esa marca, también ejecute:

git config --global core.precomposeunicode true

Aquí está el fragmento relevante de la página de manual:

Esta opción solo la usa la implementación Mac OS de Git. Cuando core.precomposeunicode = true, Git revierte la descomposición unicode de los nombres de archivo hechos por Mac OS. Esto es útil cuando se comparte un repositorio entre Mac OS y Linux o Windows. (Se necesita Git para Windows 1.7.10 o superior, o Git bajo cygwin 1.7). Cuando es falso, los nombres de los archivos se manejan completamente transparentes por Git, que es compatible con versiones anteriores de Git.

Hoy descubrí un error para Git en Mac OS X.

Por ejemplo, al principio voy a enviar un archivo con el nombre überschrift.txt con el carácter especial alemán Ü. Desde el git status comando git status obtengo el siguiente resultado.

Users-iMac: user$ git status On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # "U/314/210berschrift.txt" nothing added to commit but untracked files present (use "git add" to track)

Parece que Git 1.7.2 tiene un problema con los caracteres especiales alemanes en Mac OS X. ¿Hay alguna solución para que Git lea correctamente los nombres de los archivos?


Es correcto.

Su nombre de archivo está en UTF-8 , Ü está representado como LETRA MAYÚSCULA LATINA U + DIAGRÉS COMBINADO (Unicode 0x0308, utf8 0xcc 0x88) en lugar de la LETRA MAYÚSCULA LATINA U CON DIAESIS (Unicode 0x00dc, utf8 0xc3 0x9c). El sistema de archivos Mac OS X HFS descompone Unicode de esa manera . Git a su vez muestra la forma de escape octal de los bytes de nombre de archivo no ASCII.

Tenga en cuenta que los nombres de archivo Unicode pueden hacer que su repositorio no sea portátil. Por ejemplo, msysgit ha tenido problemas con los nombres de archivo Unicode .


Habilitar core.precomposeunicode en el mac

git config --global core.precomposeunicode true

Para que esto funcione, debes tener al menos Git 1.8.2.

Mountain Lion se envía con 1.7.5. Para obtener un git más nuevo, use git-osx-installer o homebrew (requiere Xcode).

Eso es.


La causa es la diferente implementación de cómo el sistema de archivos almacena el nombre del archivo.

En Unicode, Ü se puede representar de dos maneras, una es por Ü solo, la otra es por U + "que combina umlaut character". Una cadena Unicode puede contener ambas formas, pero como es confuso tener ambas, el sistema de archivos normaliza la cadena Unicode configurando cada Uumlauted-U en Ü, o U + "combinando umlaut character".

Linux usa el método anterior, llamado Normal-Form-Composed (o NFC), y Mac OS X utiliza el último método, llamado Normal-Form-Decomposed (NFD).

Aparentemente, a Git no le importa este punto y simplemente usa la secuencia de bytes del nombre de archivo, lo que lleva al problema que estás teniendo.

El hilo de la lista de distribución Git, Mac OS X y los caracteres especiales alemanes tienen un parche para que Git compare los nombres de los archivos después de la normalización.


Lo siguiente en ~ / .gitconfig me funciona en 10.12.1 Sierra para nombres UTF-8:

precomposeunicode = true quotepath = false

La primera opción es necesaria para que git ''entienda'' UTF-8 y la segunda para que no escape a los caracteres.


Para que git add file funcione con diéresis en los nombres de archivo en Mac OS X, puede convertir las cadenas de ruta de archivo de compuestas a UTF-8 canónicamente descompuestas usando iconv .

# test case mkdir testproject cd testproject git --version # git version 1.7.6.1 locale charmap # UTF-8 git init file=$''/303/234berschrift.txt'' # composed UTF-8 (Linux-compatible) touch "$file" echo ''Hello, world!'' > "$file" # convert composed into canonically decomposed UTF-8 # cf. http://codesnippets.joyent.com/posts/show/12251 # printf ''%s'' "$file" | iconv -f utf-8 -t utf-8-mac | LC_ALL=C vis -fotc #git add "$file" git add "$(printf ''%s'' "$file" | iconv -f utf-8 -t utf-8-mac)" git commit -a -m ''This is my commit message!'' git show git status git ls-files ''*'' git ls-files -z ''*'' | tr ''/0'' ''/n'' touch $''caf/303/251 1'' $''caf/303/251 2'' $''caf/303/251 3'' git ls-files --other ''*'' git ls-files -z --other ''*'' | tr ''/0'' ''/n''


Tuve un problema similar con mi repositorio personal, así que escribí un guión de ayuda con Python 3. Puede escribirlo aquí: https://github.com/sjtoik/umlaut-cleaner

El script necesita un poco de trabajo manual, pero no mucho.