我有一个300 MB的git repo.我目前检出的文件重2 MB,git repo重298 MB.这基本上是一个仅限代码的回购,重量不应超过几MB.
最有可能的是,有人在某个时候偶然犯了一些重文件(视频,巨大的图像等),然后将它们删除......但不是从git中删除,所以我们有无用大文件的历史.如何在git历史记录中追踪大文件?有400多个提交,所以一个接一个将是耗时的.
注意:我的问题不是关于如何删除文件,而是如何在第一时间找到它.
是否可以显示两次提交之间的文件总大小差异?就像是:
$ git file-size-diff 7f3219 bad418 # I wish this worked :)
-1234 bytes
Run Code Online (Sandbox Code Playgroud)
我试过了:
$ git diff --patch-with-stat
Run Code Online (Sandbox Code Playgroud)
这显示了diff中每个二进制文件的文件大小差异 - 但不是文本文件,而不是文件总大小差异.
有任何想法吗?
我有一个Git存储库我存储随机的东西.大多是随机脚本,文本文件,我设计的网站等等.
我随着时间的推移删除了一些大型二进制文件(通常为1-5MB),它们会增加存储库的大小,这在修订历史中是不需要的.
基本上我希望能够做到..
me@host:~$ [magic command or script]
aad29819a908cc1c05c3b1102862746ba29bafc0 : example/blah.psd : 3.8MB : 130 days old
6e73ca29c379b71b4ff8c6b6a5df9c7f0f1f5627 : another/big.file : 1.12MB : 214 days old
Run Code Online (Sandbox Code Playgroud)
..然后能够查看每个结果,检查是否不再需要然后删除它(可能使用filter-branch)
我想在我的存储库中找到10个最大的文件.我想出的脚本如下:
REP_HOME_DIR=<top level git directory>
max_huge_files=10
cd ${REP_HOME_DIR}
git verify-pack -v ${REP_HOME_DIR}/.git/objects/pack/pack-*.idx | \
grep blob | \
sort -r -k 3 -n | \
head -${max_huge_files} | \
awk '{ system("printf \"%-80s \" `git rev-list --objects --all | grep " $1 " | cut -d\" \" -f2`"); printf "Size:%5d MB Size in pack file:%5d MB\n", $3/1048576, $4/1048576; }'
cd -
Run Code Online (Sandbox Code Playgroud)
是否有更好/更优雅的方式来做同样的事情?
"文件"是指已经检入存储库的文件.
在git仓库中找到最大提交(即提交大多数更改,例如计算为添加/删除行数的提交)的方法是什么?
请注意,我真的想要最大的提交,而不是最大的文件,所以git find fat commit在这里没有用.