Git操作问题总结(二)

230 阅读4分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

前言

今天我们再来讲一讲Git操作碰到的问题,一起来看看吧。

远程仓库过大导致无法push

问题出现场景:在前两天本人发现笔记仓库过大 已经达到600M的时候,本人花了一些时间将无用的大文件删除(详见问题5),并且减小到了100M+,然后推送上了gitee上,但是今天push的时候突然报错仓库过大无法推送

  1. 问题报错截图image-20210510180415796
  2. 本人就产生很大的疑惑,明明我本地仓库才100+M,.git文件也才86M,但是远程仓库竟然达到了恐怖的1300M+(当时急于寻找解决方案,没有截图)

本人推测(不确定,也找不到人问,朋友都没经历过这个情况,所以引出记录待定,如果有小伙伴知道了希望可以发在评论区或者私信我)

  1. 当时我是将多条命令一起复制进去运行,可能导致git gc命令没有运行到(可能性极小,但还是留下悔恨的泪水)

  2. 也许本地的gc命令只是清理了本地仓库的,远程也要清理,但这个并不重要,知道了这个点后我们能进行解决了

    image-20210510180539437image-20210510181407805

  3. 问题解决:

    image-20210510180757993

    GC后内存image-20210510181329197

  4. GC详解

Git的底层并没有采用 CVS、SVN 底层所采用的那套增量式文件系统,而是采用一套自行维护的存储文件系统。当文件变动发生提交时,该文件系统存储的不是文件的差异信息,而是文件快照,即整个文件内容,并保存指向快照的索引。这种做法,提高 Git 分支的使用效率;但也容易导致代码仓库中内容重复程度过高,从而仓库体积过大。当遇到这种情况时,或者需要将仓库推送到远程主机时,就需要Git中的gc(garbage collect)功能,也就是垃圾回收功能

大体来说,当运行 "git gc" 命令时,Git会收集所有松散对象并将它们存入 packfile,合并这些 packfile 进一个大的 packfile,然后将不被任何 commit 引用并且已存在一段时间 (数月) 的对象删除。 此外,Git还会将所有引用 (references) 并入一个单独文件。

就细节而言,Git做了这几件事:

pack_refs 过程 reflog expire 过程 repack 过程 prune 过程 rerere 过程

pack_refs 过程相当于执行"git pack-refs --all --prune",它会将GITDIR/refs目录下的所有heads和tags打包成一个文件并保存为GITDIR/refs目录下的所有heads和tags打包成一个文件并保存为GIT_DIR/packed-refs下。

reflog expire 过程相当于执行"git reflog expire --all",它会将删除所有超过期限而且没有被refs涉及的reflog条目。

repack 过程相当于执行"git repack -d -l",一般情况下还会包括"-A"选项,它会将所有未被包含在一个pack的松散对象连结成一个pack,也会将现有的pack重新组织为一个新的更有效率的pack,并删除冗余的pack(如果她们中存在不可达的松散对象,会先把这些对象释放出来)。

prune 过程相当于执行"git prune --expire",他会删除所有过期的、不可达的且未被打包的松散对象。

rerere 过程相当于执行"git rerere gc",这种情形下似乎没什么用。

所以本人推测应该是进行了问题5操作后还需要进行一次GC操作

8、Git GUI中文乱码问题解决方法

当我们使用Git GUI的查看代码的时候,有时候会出现中文乱码:

  1. 解决方案1:直接在GIT GUI中操作

**image-20210701180547401

  1. 解决方案2:命令行
git config --global gui.encoding utf-8
  1. 解决方案3:直接修改配置文件

在软件的安装目录下,在Git\mingw32\etc\gitconfig文件末尾添加:

[gui]encoding=utf-8

9、Git 切换远程仓库地址

在公司开发中,也许会遇到公司项目地址迁移的问题(本人就遇到了) : 比如从码云gitee上将项目迁移到gitLab上,那么我们本地怎么切换远程仓库地址呢? 很简单!

  1. 切换远程仓库地址

  • 方式一:修改远程仓库地址

    git remote set-url origin URL #更换远程仓库地址,URL为新地址。一步到胃
    
  • 方式二:先删除远程仓库地址,然后再添加

    git remote rm origin #删除现有远程仓库
    git remote add origin url #添加新远程仓库
    
  1. 查看远程仓库地址

没错,改完了,很简单是吧,但是你怎么确定自己是否修改成功了呢?

git remote -v  #查看远程仓库的地址
  1. 截图示例

Git 切换远程仓库地址

总结:还有最后一章关于Git操作总结的文章,大家有兴趣的可以继续关注!