git-git gc

Posted 魔鬼_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git-git gc相关的知识,希望对你有一定的参考价值。

在执行git gc之前我们看一下.git目录的一些信息:
refs目录下边有三个文件夹:

此三个文件夹下边都存在一些本地、远程分支的信息,以及标签的 信息。

执行git gc:
执行完毕之后,heads、remotes、tags下边的内容消失,git并不是删除了这些信息,而是存放在 .git/packed-refs文件里边,即进行了压缩。

通过里边的内容我们还可以验证带有注释标签的一些信息,v1.0只有一个id指向的就是一个commitid,而带有注释的v2.0有两个id第一id是其本身,第二个是指向的commitid,可以看到id前边有个“^”符号。

此时我们如果在进行一次提交和推送,那么又会在.git/refs/下边出现新的内容记录git的信息:

如图我们对test.txt进行了提交,在.git/refs/heads和.git/refs/remotes下边出现了新的内容,而不是放在.git/packed-refs文件里边。

此外git gc还会对每次提交的文件进行压缩,我们知道git和svn的区别就是git是全量记录文件的提交,而svn是记录变化量,既然git 记录的是全量的文件,那是不是会很大,占用空间,并且是怎么存放的呢?
其实所有的提交文件记录都在.git/objects/里边:

执行git gc之后文件都会=消失,转而放在pack目录下:

$ git gc
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (18/18), done.
Total 18 (delta 4), reused 15 (delta 4)

Administrator@CeaserWang MINGW64 /e/Study/mygit (master)
$ ls .git/objects/
info/  pack/
Administrator@CeaserWang MINGW64 /e/Study/mygit (master)
$ ls .git/objects/pack/
pack-94d0a6b4da258363c6f774e525a8615469b64e03.idx  pack-94d0a6b4da258363c6f774e525a8615469b64e03.pack

复习:
将一个文件从暂存区删除,但是保存在工作区:
git rm –cached test.txt
重命名文件:
git mv test.txt test2.txt = git rm test.txt + git add test2.txt
重命名远程仓库:
git remote rename origin origin2
删除远程仓库:
git remote rm origin

以上是关于git-git gc的主要内容,如果未能解决你的问题,请参考以下文章

GIT-GIT分支列表

Git-git rebase详解

javajava Parallel GC 该怎么看?

[Unity优化]gc01:string

Golang实验性功能SetMaxHeap 固定值GC

GC收集器理解