Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it safe to set git's core.precomposeunicode = true globally?

Tags:

git

We're setting up git 1.8 in a mixed environment (OSX, Linux, Windows) and there are filenames that use non-English characters. I've read that that core.precomposeunicode needs to be set to true on the OSX systems.

We're not concerned with backward compatibility. We are concerned with keeping things simple for the developers. We'd rather not have to explain about git configuration.

So: is it safe to set that flag globally (in the central git server)? Will that enforce the consistency we need? Is there a reason not to?

like image 537
egrunin Avatar asked Oct 22 '22 15:10

egrunin


2 Answers

No, that won't work. There is no such thing as a central git server in a distributed version control system - at least not in the technical sense.

Each developer has his own repository to which he checks in his changes. When those changes are pushed to the repository you declare as central, the data is not re-processed.

You will have to set that configuration on every local repository.
Unfortunately, there is no alternative with .gitattributes either.

Local options for a certain repository that will then be cloned by the developers isn't an option either. The following simple experiment shows this:

d:\Temp\Origin>git init
Initialized empty Git repository in d:/Temp/Origin/.git/

d:\Temp\Origin>git config --local --add core.autocrlf input
d:\Temp\Origin>git config --local --list
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
core.autocrlf=input
d:\Temp\Origin>cd ..
d:\Temp>git clone d:\Temp\Origin Developer
Cloning into 'Developer'...
warning: You appear to have cloned an empty repository.
done.

d:\Temp>cd Developer

d:\Temp\Developer>git config --local --list
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=d:\Temp\Origin
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

Note how the call to git config --local --list in Origin lists core.autocrlf=input and the same command in Developer doesn't, although we just cloned Developer from Origin.
That demonstrates that repository-local configuration values are not cloned.

like image 76
Daniel Hilgarth Avatar answered Oct 25 '22 06:10

Daniel Hilgarth


While repository-local configuration values are not cloned, Git 2.37 (Q3 2022), will be more robust regarding core.precomposeunicode on Mac, for the fsmonitor (a daemon watching the working directory for file and directory changes using platform-specific file system notification facilities, communicating directly with commands like git status).

That way, setting core.precomposeunicode to true is better managed.

See commit 3294ca6, commit 53fcfbc, commit eb29901, commit 00991e1, commit 9915e08, commit d6d58ff, commit caa9c37, commit f954c7b, commit 7667f9d, commit b533708, commit 95a4e78, commit de7e0b5, commit 6504cfd, commit 90a70fa, commit d060555, commit 207534e, commit 802aa31, commit 39664e9, commit 8e8f4b8, commit 9968ed7, commit ddc5dac, commit d989b26, commit 1e7be10, commit a85ad67, commit 5c58fbd, commit d33c804, commit 62a62a2, commit 49b398a, commit 27b5d41, commit 40f865d (26 May 2022) by Jeff Hostetler (Jeff-Hostetler).
See commit 852e2c8 (25 Mar 2022) by Junio C Hamano (gitster).
(Merged by Junio C Hamano -- gitster -- in commit 9e496ff, 10 Jun 2022)

fsmonitor: on macOS also emit NFC spelling for NFD pathname

Signed-off-by: Jeff Hostetler

Emit NFC or NFC and NFD spellings of pathnames on macOS.

MacOS is Unicode composition insensitive, so NFC and NFD spellings are treated as aliases and collide.
While the spelling of pathnames in filesystem events depends upon the underlying filesystem, such as APFS, HFS+ or FAT32, the OS enforces such collisions regardless of filesystem.

Teach the daemon to always report the NFC spelling and to report the NFD spelling when stored in that format on the disk.

This is slightly more general than "core.precomposeUnicode".

like image 25
VonC Avatar answered Oct 25 '22 07:10

VonC