Is it safe to set git's core.precomposeunicode = true globally?
git
Solution
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.
Problem
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?