我有一个300 MB的git repo.我目前检出的文件重2 MB,git repo重298 MB.这基本上是一个仅限代码的回购,重量不应超过几MB.
最有可能的是,有人在某个时候偶然犯了一些重文件(视频,巨大的图像等),然后将它们删除......但不是从git中删除,所以我们有无用大文件的历史.如何在git历史记录中追踪大文件?有400多个提交,所以一个接一个将是耗时的.
注意:我的问题不是关于如何删除文件,而是如何在第一时间找到它.
是否有可能获得有关每次提交中的更改浪费了多少空间的信息 - 因此我可以找到添加大文件或大量文件的提交.这都是为了尝试减少git repo大小(重新定位和过滤提交)
Git使用增量压缩来存储彼此相似的对象.
此算法是否已标准化并在其他工具中使用?是否有描述格式的文档?它与xdelta/VCDIFF/RFC 3284兼容吗?
我想在我的存储库中找到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)
是否有更好/更优雅的方式来做同样的事情?
"文件"是指已经检入存储库的文件.
我有一个33 MB的大文件,我想永久删除该文件的最旧版本,所以我只保留最新的X版本.怎么做?
我裸露的存储库因此而变得庞大.
我尝试了以下..但它完全删除了文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_manual.txt' HEAD
Run Code Online (Sandbox Code Playgroud)
为了识别我的存储库中的大文件,我使用了Aristotle Pagaltzis的git-large-blob.