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目录下:
1 | $ git gc |
复习:
将一个文件从暂存区删除,但是保存在工作区:
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