Popular blog tags

.git目录太大

Published

.git 这个隐藏目录并不算在代码体积之后,但是我们拉代码的时候,是需要拉下来的,因为里面包含之前的提交记录等信息。这就会导致下载速度变的很慢。

/data# du -d 1 -h
24K	./etc
185M	./homeassistant202405
8.0K	./localvoice
2.0G	./.git
8.0K	./frpc
4.0K	./git
52K	./usr
2.2G	.

 

原因解释


需要对 Git 的工作原理要有一定的理解,才可以明白!
当我们使用 git add 和 git commit 命令的过程中,Git 不知不觉就会帮我们创建出来了 blob 文件对象,然后更新 index 索引,再然后创建 tree 对象,最后创建出了 commit 对象。这些 commit 对象指向了顶层 tree 对象以及先前的 commit 对象。
而上述创建出来的对象,都以文件的方式保存在 .git/objects 目录下。所以,当我们在使用的过程中,提交了一个体积特别大的文件,就会被 Git 追踪记录在 .git/objects 文件夹下面。
此时,如果我们再次删除这个体积特别大的文件,其实 Git 只会记录了我们删除的这个操作,但并不会把文件从 .git 文件夹下面真正的删除,即 .git 文件夹完全不会变小。

 

解决方法

[方法一] 重建仓库


重建仓库的这种做法,算是一种比较一劳永逸且相对而言比较简单的方式。既然现在的仓库已经让我们无法忍受,与其这样,还不是删除重建来的爽快。但是,这种做法一般情况下,都是不可行,除非是自己的本地项目。

 

删除.git中的大文件

Step 1. 查看哪些历史提交过文件占用空间较大

使用以下命令可以查看占用空间最多的五个文件:

 

/data# git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

 

35be1de009ddc9508b3906c941054f069c48bb87 .storage/trace.saved_traces
4d5cc63524d9b29e7d5b226936364c7b742d2143 homeassistant/.storage/xiaomi_miot/instances.json
5248a208d69d77977321c7ae02826a1abba786bc .storage/xiaomi_miot/instances.json
495b7babedc0e9149370bb13cecf28736f208a78 .storage/trace.saved_traces
8651118111badcdb1d36ba256a60c1341dab153f backups/96e49112.tar

 

 

https://blog.csdn.net/lilizhou2008/article/details/123038737

https://blog.csdn.net/LOI_QER/article/details/107911115