在使用 git 版本仓库时,难免会出现默认配置不符合我们需要的地方。尤其是在 windows 上使用 git 时,不如意的地方就会更频繁的出现。这时需要我们自己手动微调 git 的默认配置,汇总如下:
别名
经常输入 git status
查看库当前状态,如果终端环境不支持 tab 自动补全,频繁输入 status
完整单词就会变得很繁琐,考验耐心;即便支持自动补全,git status
和 git stash
也是前缀相同。这时我们可以考虑 使用别名:
1 | git config --global alias.co checkout |
自动补全 & 色彩
较新版本的 git,较新版本的终端,没有遇到过无法自动补全的情况。在旧版本系统上,无法使用源码安装新版本 git 的前提下,使用老版本 git 可能遇到无法自动补全 and 黑底白字没有足够色彩提示的情况:
1 | 待补充 |
换行符
换行符在跨平台时是一个老生常谈的问题了,在此不再介绍其背景知识。直接用结果就行 collection of ready to use .gitattributes files
相关的两个配置:
1 | # 提交时转换为 LF,检出时转换为 CRLF |
关于 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 | # Auto detect text files and perform LF normalization |
- 属性
text
影响文件在仓库内的存储,可选的区分文件是否是文本文件; - 属性
eof
影响文件在工作区的换行符;
更多参考
- What’s the best CRLF (carriage return, line feed) handling strategy with Git?
- Visual Studio Tools for Git 处理断行字元(CRLF) 的注意事项
- What is the differrence between
* text=auto
and* text eol=lf
in .gitattributes?
文件编码
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 status
和 git push/pull
时,中文文件名仍然乱码。
1 | // 不对 0x80 以上的字符进行 quote,解决 git status/commit 时中文文件名乱码 |
更多中文显示问题请移步 Git中文显示问题解决