2013-03-05 266 views
4

我们在混合环境(OSX,Linux,Windows)中设置git 1.8,并且存在使用非英文字符的文件名。我读过在OSX系统上需要将core.precomposeunicode设置为true设置git的core.precomposeunicode = true是否安全?

我们不关心向后兼容性。我们关心为开发人员保持简单。我们宁愿不必解释关于git的配置。

因此:全局设置该标志是否安全(在中央git服务器中)?这会强制我们需要的一致性吗?有没有理由不?

回答

3

不,那不行。在版本控制系统中,没有像中央git服务器那样的东西 - 至少在技术上不是这样。

每个开发人员都有自己的存储库,他将检查其更改。当这些更改被推送到存储库时,您将声明为为中心,数据不会被重新处理。

您必须在每个本地存储库上设置该配置。
不幸的是,使用.gitattributes也没有其他选择。

然后由开发人员克隆的某个存储库的本地选项也不是选项。下面这个简单的实验表明这一点:

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 

注意在DeveloperOrigin名单core.autocrlf=input调用git config --local --list和相同的命令怎么没有,虽然我们只是克隆DeveloperOrigin
这说明克隆的存储库本地配置值是而不是

+0

我被告知的是我们想“在服务器上设置变量,以便它被用户继承” - 你是说这不是它的工作原理? (我无法在git文档中找到明确的解释,但可能我不知道要求什么。) – egrunin 2013-03-05 21:13:45

+2

@egrunin:正如我所说的:从技术上讲,*没有中央服务器。所有仓库在技术上都处于同一水平。您只能为特定存储库设置配置选项。但是当你克隆它时,这个选项将不会被“传送”。 – 2013-03-05 21:28:50

+0

+1这非常有帮助。我要向团队展示这件事,并确保我已正确地表达了我们的问题。 – egrunin 2013-03-05 23:36:13