我們在混合環境(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