Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git and the Umlaut problem on Mac OS X

Today I discovered a bug for Git on Mac OS X.

For example, I will commit a file with the name überschrift.txt with the German special character Ü at the beginning. From the command git status I get following output.

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) 

It seems that Git 1.7.2 has a problem with German special characters on Mac OS X. Is there a solution to get Git read the file names correct?

like image 457
0xPixelfrost Avatar asked Apr 07 '11 13:04

0xPixelfrost


2 Answers

Enable core.precomposeunicode on the mac

git config --global core.precomposeunicode true 

For this to work, you need to have at least Git 1.8.2.

Mountain Lion ships with 1.7.5. To get a newer git either use git-osx-installer or homebrew (requires Xcode).

That's it.

like image 127
chicken Avatar answered Sep 18 '22 13:09

chicken


The cause is the different implementation of how the filesystem stores the file name.

In Unicode, Ü can be represented in two ways, one is by Ü alone, the other is by U + "combining umlaut character". A Unicode string can contain both forms, but as it's confusing to have both, the file system normalizes the unicode string by setting every umlauted-U to Ü, or U + "combining umlaut character".

Linux uses the former method, called Normal-Form-Composed (or NFC), and Mac OS X uses the latter method, called Normal-Form-Decomposed (NFD).

Apparently Git doesn't care about this point and simply uses the byte sequence of the filename, which leads to the problem you're having.

The mailing list thread Git, Mac OS X and German special characters has a patch in it so that Git compares the file names after normalization.

like image 30
Yuji Avatar answered Sep 22 '22 13:09

Yuji