Published on

Git常用小问题笔记

Authors
  • avatar
    Name
    弈秋
    Twitter

Git常用小问题笔记

缘起

从csv到svn,最后到git,我已经用过三代代码版本管理工具了,git已经用了很多年了,但是还是有一些小小的问题,需要在重启一个新终端的时候,完成配置,这里简单记录一下git的一些常见初始化问题。

基本配置

配置分级

git的配置分级别的,优先级从高到低是:

优先级层级配置文件位置作用范围
1(最高)local(本地).git/config(当前仓库)仅当前仓库
2global(全局)~/.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:

  1. 目录创建 .gitattributes 文件,内容
# 自动检测文本文件,统一使用 LF
* text=auto eol=lf
  1. 配置git
git config --global core.autocrlf false

中文乱码

也不是叫乱码,是一串数字,如下图:

这其实是 Git 默认对非 ASCII 字符进行了转义处理,所以中文会被转义为一串数字,导致无法正常显示

git config --global core.quotepath false

小结

这算不上问题,只是一个开源开放性工具留给不同人的选择,所以拿到一个新的终端(电脑),到好用顺手之间,还是需要一些配置的,这里记录一些,下次一次性完成配置。