Git常用小问题笔记

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)

账号和邮箱是不同的,为了简化配置,就让全局默认账号配置公司的,自己的和开源的诸个配置:

bash 复制代码
# 全局配置
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,所以需要修改一下:

bash 复制代码
# 设置默认分支名为 main
git config --global init.defaultBranch main

凭据缓存

如果你的仓库是一共ssh+证书,那另说,如果是https+用户名密码,那每次都输入也太难了,比如让他记住:

bash 复制代码
git config --global credential.helper store

# 如果密码输入错误,需要重新弹出窗口输入
git config --system --unset credential.helper

代理

这个一般是特殊需求,比如我们公司要求代码服务器只能指定IP访问(我猜你信了):

bash 复制代码
# 全局配置
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

自签名

公司服务器是内网,是自签名的,只能让他不要校验证书了

bash 复制代码
 git config --global http.sslVerify false

别名

大多数时候,我不喜欢别名,我是是怕常用的命令都忘了,但是有些太常用了,又太长的命令,还是有别名比较好,例如合作开发我最长用的就是看看最近别人提交了什么:

bash 复制代码
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

这个问题是大模型出现后才出现的,因为我以前没用过那么大的仓库,本质就是仓库太大,超过了默认的包大小限制,需要修改默认:

bash 复制代码
# 修改提交缓存大小为500M,或者更大的数字
git config --global http.postBuffer 524288000

LF will be replaced by CRLF the next time

字面意思很好理解:就是LF会被替换CRLF,问题也好理解,就是window和linux内核系统在处理换行上的差异,需要指定配置:

bash 复制代码
# 宽松的:不管,让git自动处理
git config --global core.autocrlf true

如果是个很多人合作的严肃的项目:建议统一规范,比如要求使用LR:

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

中文乱码

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

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

bash 复制代码
git config --global core.quotepath false

小结

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

相关推荐
Elasticsearch2 小时前
三个区域、三个 Kibana、一个视图:跨集群搜索登陆 Elastic 合成监测
elasticsearch
keyipatience2 小时前
Git学习(3)合并冲突全解析:从原理到实战解决
大数据·elasticsearch·搜索引擎
刘老高3 小时前
微服务架构实战:ShardingSphere Proxy + Canal 分库分表与 ES 同步全链路
elasticsearch·微服务·架构
Elasticsearch3 小时前
Elastic 重大事件功能如何将 100 条日志样本转化为检测规则
elasticsearch
Wanderer X3 小时前
MiniMax-H3(ref2va)架构与推理方法笔记
笔记
深圳老胡3 小时前
STM32C562RET6 外部中断详解:从 EXTI 原理到 GPIO 外部中断实战
笔记·stm32·单片机·代码规范·1024程序员节
海绵宝宝转agent3 小时前
leetcodehot100个人题解
java·笔记·学习·算法
橙露16 小时前
git简明教程以及资源分享
大数据·git
李某学编程17 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习