git 常用配置

在使用 git 版本仓库时,难免会出现默认配置不符合我们需要的地方。尤其是在 windows 上使用 git 时,不如意的地方就会更频繁的出现。这时需要我们自己手动微调 git 的默认配置,汇总如下:

别名

经常输入 git status 查看库当前状态,如果终端环境不支持 tab 自动补全,频繁输入 status 完整单词就会变得很繁琐,考验耐心;即便支持自动补全,git statusgit stash 也是前缀相同。这时我们可以考虑 使用别名

1
2
3
4
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

自动补全 & 色彩

较新版本的 git,较新版本的终端,没有遇到过无法自动补全的情况。在旧版本系统上,无法使用源码安装新版本 git 的前提下,使用老版本 git 可能遇到无法自动补全 and 黑底白字没有足够色彩提示的情况:

1
# 待补充

换行符

换行符在跨平台时是一个老生常谈的问题了,在此不再介绍其背景知识。直接用结果就行 collection of ready to use .gitattributes files

相关的两个配置:

1
2
3
4
5
6
7
8
9
# 提交时转换为 LF,检出时转换为 CRLF
git config --global core.autocrlf true
# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
# 提交检出均不转换
git config --global core.autocrlf false

# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true

关于 autocrlf 的三个选项,都太绝对化了。毕竟 bash 脚本是要 LF 而 bat 脚本是要 CRLF,我们需要区分文件。

如果我们非常自律,可以选择 autocrlf = false,但跨平台会有隐患:比如源文件在 windows 下最好是 CRLF 而在 Linux 下最好是 LF

通过 .gitattributes 文件 更好地处理换行符问题:Configuring Git to handle line endings

Git 还是倾向于更少的字符,倾向于 LF 而非 CRLF

text 属性 enables and controls end-of-line normalization 规范化. When a text file is normalized, its line endings are converted to LF in the repository. 仓库内部使用 LF,但工作区的换行符可以自定义 To control what line ending style is used in the working directory, use the eol attribute for a single file and the core.eol configuration variable for all text files. Note that setting core.autocrlf to true or input overrides core.eol

When text is set to “auto”, the path is marked for automatic end-of-line conversion. If Git decides 推断 that the content is text, its line endings are converted to LF on checkin. When the file has been committed with CRLF, no conversion is done. 文本文件签入时换行符统一转成 LF,但已经提交的 CRLF 除外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Auto detect text files and perform LF normalization
* text=auto
*.txt text
# ensure that .vcproj files have CRLF
*.vcproj text eol=crlf
*.bat text eol=crlf
*.ps1 text eol=crlf
# and .sh files have LF in the working directory,
*.sh text eol=lf
# and prevent .jpg files from being normalized
*.jpg -text

# 新仓库和旧仓库,引入这些属性后表现一致吗?

  • 属性 text 影响文件在仓库内的存储,可选的区分文件是否是文本文件;
  • 属性 eof 影响文件在工作区的换行符;

更多参考

文件编码

core.autocrlf=true 碰到 utf-8 编码的包含汉字的文本时是否会出问题?——以前可能会,现在不会!

GitHub 第一坑:换行符自动转换,在缺陷一节提到内容,经实际测试不存在。测试环境:

GitHub Desktop Version 1.0.11
git version 2.15.1.windows.2

中文显示

在 linux 终端中,中文显示异常不一定是 git 的锅,可能是终端自身的问题。这里的解决方案针对的是 windows 下中文显示问题:

git log 内容已可正常使用并显示中文,但 git statusgit push/pull 时,中文文件名仍然乱码。

1
2
// 不对 0x80 以上的字符进行 quote,解决 git status/commit 时中文文件名乱码
git config --global core.quotepath false

更多中文显示问题请移步 Git中文显示问题解决