最近在工作中遇到一些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:[email protected]: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/*
文中如有表达不恰当的地方,请帮忙指正,也欢迎技术交流,谢谢!