我们在混合环境(OSX,Linux,Windows)中设置git 1.8
,并且存在使用非英文字符的文件名。我读过在OSX系统上需要将core.precomposeunicode
设置为true
。设置git的core.precomposeunicode = true是否安全?
我们不关心向后兼容性。我们是关心为开发人员保持简单。我们宁愿不必解释关于git
的配置。
因此:全局设置该标志是否安全(在中央git服务器中)?这会强制我们需要的一致性吗?有没有理由不?
我们在混合环境(OSX,Linux,Windows)中设置git 1.8
,并且存在使用非英文字符的文件名。我读过在OSX系统上需要将core.precomposeunicode
设置为true
。设置git的core.precomposeunicode = true是否安全?
我们不关心向后兼容性。我们是关心为开发人员保持简单。我们宁愿不必解释关于git
的配置。
因此:全局设置该标志是否安全(在中央git服务器中)?这会强制我们需要的一致性吗?有没有理由不?
不,那不行。在版本控制系统中,没有像中央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
注意在Developer
在Origin
名单core.autocrlf=input
调用git config --local --list
和相同的命令怎么没有,虽然我们只是克隆Developer
从Origin
。
这说明克隆的存储库本地配置值是而不是。
我被告知的是我们想“在服务器上设置变量,以便它被用户继承” - 你是说这不是它的工作原理? (我无法在git文档中找到明确的解释,但可能我不知道要求什么。) – egrunin 2013-03-05 21:13:45
@egrunin:正如我所说的:从技术上讲,*没有中央服务器。所有仓库在技术上都处于同一水平。您只能为特定存储库设置配置选项。但是当你克隆它时,这个选项将不会被“传送”。 – 2013-03-05 21:28:50
+1这非常有帮助。我要向团队展示这件事,并确保我已正确地表达了我们的问题。 – egrunin 2013-03-05 23:36:13