最近在工作中遇到一些Git配置方面的問題,在這里記錄一些解決方案,希望能幫到大家少踩一些坑。
主要涉及:
- Git配置文件
- Git配置代理(Proxy)
- Git配置Unix換行符
- 配置Gerrit默認Push
Git配置文件
Git配置文件有三個級別,分別是系統級別、全局級別以及倉庫級別。下面的表格展示了各個級別的配置的具體信息:
配置級別 | 文件位置 | 配置命令 | 優先級別 |
---|---|---|---|
系統 | Git安裝目錄\etc\gitconfig | git config --system | 低 |
全局 | 用戶文件夾.gitconfig | git config --global | 中 |
倉庫 | 倉庫文件夾.git\config | git config --local | 高 |
多級別的配置文件對于在同一臺電腦上同時擁有公司代碼和個人代碼的開發者來說還是非常方便的。如果相同配置存在于各個級別的配置文件中,則倉庫級別的優先級最高。修改Git配置可以通過命令行,也可以直接修改相應的配置文件內容。
如果要對全局的Git用戶名和郵箱進行配置,命令如下:
$ git config --global user.name "輸入你的用戶名"
$ git config --global user.email "輸入你的郵箱"
要查看所有配置或者某一項配置,命令如下:
$ git config --global -l
$ git config --global --get user.name
$ git config --global --get user.email
用戶名和郵箱等字段都是默認存在的配置項,如果要添加新的配置項,則命令如下:
$ git config --global --add myConfig.name myConfigValue
$ git config --global --add myConfig.email myConfigValue
Git配置代理(Proxy)
許多公司對Maven、Git等倉庫都有代理服務器,git config也提供了代理的配置。
$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
proxyuser:proxypwd為代理的用戶名和密碼,如果沒有,可以忽略掉這段。
proxy.server.com為代理的地址,可以是IP或者URL,8080則為代理端口。
請根據具體情況進行修改配置。
取消代理的配置(同樣適用于取消其他配置):
$ git config --global --unset http.proxy
Git配置Unix換行符
使用Windows開發經常會遇上換行符不匹配的問題,代碼對比工具會告訴你‘Contents have differences only in line separators’,什么意思?
在Unix中,換行符為\n(LF),而在Windows下,換行符為\r\n(CRLF)。通過配置Git,也可以避免換行符不匹配的問題。
core.autocrlf
core.autocrlf 這一配置項能夠自動在commit或check out時轉換兩種換行符。
$ git config --global core.autocrlf true
check out代碼時,換行符會自動由LF轉換為CRLF,而在commit時,Git也會將CRLF轉換為LF,以方便在Windows上開發。
$ git config --global core.autocrlf input
check out代碼時,不會有任何的轉換發生,而在commit代碼時,Git仍舊會把CRLF轉換為LF。這個選項推薦Mac開發者使用。
$ git config --global core.autocrlf false
整個自動轉換就會被關閉,比較適合大家都在同一種系統上進行開發的工程。此時也可配置core.eol(ending of line)來規定本地倉庫的統一規則,選項為lf/crlf/native。
core.safecrlf
core.safecrlf 這一配置項能夠在commit代碼時檢查是否混用了換行符。
$ git config --global core.safecrlf true
Git會在提交時進行檢查,并拒絕混用了換行符的文件的提交
$ git config --global core.safecrlf warn
Git會在提交時進行檢查,并提示警告
$ git config --global core.safecrlf false
Git不會在提交時進行檢查
當然,統一代碼的規范不能能依賴于Git的配置,這應該是一個團隊基本的合作精神。
Gerrit配置默認Push
Gerrit是一款Code Review代碼審查工具,它在Git遠程倉庫和本地倉庫之間設立了一個代碼審查的服務器,每一個commit都可以在進行CI檢查、審閱之后再被決定是否合并至主分支。
然而Gerrit要求代碼push至refs/for/(branch),這樣才能將代碼提交到Gerrit服務器上進行審閱。這就導致每次push代碼,必須鍵入如下的命令,或是使用SourceTree類似的工具時每次都要手動修改push的地址:
$ git push origin HEAD:refs/for/master
通過Git配置的修改,可以讓代碼默認被push到Gerrit中:
$ git config --local remote.origin.push refs/heads/*:refs/for/*
文中如有表達不恰當的地方,請幫忙指正,也歡迎技術交流,謝謝!