- Published on
Git常用小问题笔记
- Authors

- Name
- 弈秋
Git常用小问题笔记
缘起
从csv到svn,最后到git,我已经用过三代代码版本管理工具了,git已经用了很多年了,但是还是有一些小小的问题,需要在重启一个新终端的时候,完成配置,这里简单记录一下git的一些常见初始化问题。
基本配置
配置分级
git的配置分级别的,优先级从高到低是:
| 优先级 | 层级 | 配置文件位置 | 作用范围 |
|---|---|---|---|
| 1(最高) | local(本地) | .git/config(当前仓库) | 仅当前仓库 |
| 2 | global(全局) | ~/.gitconfig(用户目录) | 当前用户所有仓库 |
| 3(最低) | system(系统) | 安装目录下的 gitconfig | 整个系统所有用户 |
命令:
| 命令 | 输出内容 |
|---|---|
git config --list | 所有层级中生效的配置(按优先级合并,同键覆盖) |
git config --list --show-origin | 同上,额外显示每个配置的来源文件 |
git config --local --list | 仅当前仓库的配置 |
git config --global --list | 仅当前用户的全局配置 |
git config --system --list | 仅系统级配置 |
使用实践:
优先级高的配置会覆盖低的配置,所以我们可以利用这一点,来优化我们的配置:
作为一个程序员,也存在不同的角色,每个角色可能对应不同的版本服务器,不同的服务器对应不同的账号:
比如我干活的项目最多(存于公司自建Git lab),自己基于学习的项目其次(私有 gitea),参与开源开发的最少(github)
账号和邮箱是不同的,为了简化配置,就让全局默认账号配置公司的,自己的和开源的诸个配置:
# 全局配置
git config --global user.name "yiqiu"
git config --global user.email "yiqiu@worker.com"
# 其他单个项目配置
git config user.name "yiqiu"
git config user.email "yiqiu@study.edu"
默认分支名称
现在主流的git server都改成了main为默认分支,但是git默认还是master,所以需要修改一下:
# 设置默认分支名为 main
git config --global init.defaultBranch main
凭据缓存
如果你的仓库是一共ssh+证书,那另说,如果是https+用户名密码,那每次都输入也太难了,比如让他记住:
git config --global credential.helper store
# 如果密码输入错误,需要重新弹出窗口输入
git config --system --unset credential.helper
代理
这个一般是特殊需求,比如我们公司要求代码服务器只能指定IP访问(我猜你信了):
# 全局配置
git config --global http.proxy "http://127.0.0.1:10808"
git config --global https.proxy "http://127.0.0.1:10808"
# 取消全局配置
git config --global --unset http.proxy
git config --global --unset https.proxy
自签名
公司服务器是内网,是自签名的,只能让他不要校验证书了
git config --global http.sslVerify false
别名
大多数时候,我不喜欢别名,我是是怕常用的命令都忘了,但是有些太常用了,又太长的命令,还是有别名比较好,例如合作开发我最长用的就是看看最近别人提交了什么:
git log --oneline --graph --decorate -10
# 设置别名
git config --global alias.lg "log --oneline --graph --decorate -10"
这样下次直接git lg就可以了
常见问题
fatal: the remote end hung up unexpectedly
这个问题是大模型出现后才出现的,因为我以前没用过那么大的仓库,本质就是仓库太大,超过了默认的包大小限制,需要修改默认:
# 修改提交缓存大小为500M,或者更大的数字
git config --global http.postBuffer 524288000
LF will be replaced by CRLF the next time
字面意思很好理解:就是LF会被替换CRLF,问题也好理解,就是window和linux内核系统在处理换行上的差异,需要指定配置:
# 宽松的:不管,让git自动处理
git config --global core.autocrlf true
如果是个很多人合作的严肃的项目:建议统一规范,比如要求使用LR:
- 目录创建 .gitattributes 文件,内容
# 自动检测文本文件,统一使用 LF
* text=auto eol=lf
- 配置git
git config --global core.autocrlf false
中文乱码
也不是叫乱码,是一串数字,如下图:
这其实是 Git 默认对非 ASCII 字符进行了转义处理,所以中文会被转义为一串数字,导致无法正常显示
git config --global core.quotepath false
小结
这算不上问题,只是一个开源开放性工具留给不同人的选择,所以拿到一个新的终端(电脑),到好用顺手之间,还是需要一些配置的,这里记录一些,下次一次性完成配置。