2013-03-05 70 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