繁体   English   中英

如何减少git repo的大小?

[英]How can I reduce the size of my git repo?

我的git repo应该相对较小,但是我过去提交的文件很大,所以我的.git/objects/pack文件很大。 我已经很长时间没有接触过此存储库了,所以我不知道导致该存储库大小超出所需大小的文件名。

如何缩小git repo的大小?

通常,您需要重写Git历史记录并删除这些文件: https : //git-scm.com/book/en/v1/Git-Tools-Rewriting-History

之后,您强行推送到存储库,就应该完成了。

如果需要重写,我通常使用git rebase -i <options> ,但这取决于您的特定情况。

PS:执行此操作时也要注意其含义(分支机构可能没有父母,其他人将根据基准进行硬重置或硬重置,以便您可以取回这些文件,等等)

从git历史记录中查找和清除大文件是有关如何查找和删除大文件的好文章。

最低限度的步骤是:

1)Git具有唯一的SHA,它在整个历史记录中都与每个对象(例如,称为blob的文件)相关联。 这有助于我们找到该对象并决定是否值得稍后删除:

git rev-list --objects --all | sort -k 2 > allfileshas.txt

2)获取所有已提交文件的最后一个对象SHA并按最大到最小顺序对其进行排序:

git gc && git verify-pack -v .git/objects/pack/pack-*.idx | egrep "^\w+ blob\W+[0-9]+ [0-9]+ [0-9]+$" | sort -k 3 -n -r > bigobjects.txt

3)获取结果并遍历每一行以查找SHA,文件大小(以字节为单位)和真实文件名(您还需要上面的allfileshas.txt输出文件):

for SHA in `cut -f 1 -d\  < bigobjects.txt`; do
echo $(grep $SHA bigobjects.txt) $(grep $SHA allfileshas.txt) | awk '{print $1,$3,$7}' >> bigtosmall.txt
done;

4)使用filter-branch删除文件/目录(将MY-BIG-DIRECTORY-OR-FILE替换为相对于git repo根目录要删除的路径:

git filter-branch --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch MY-BIG-DIRECTORY-OR-FILE' --tag-name-filter cat -- --all

5)然后克隆仓库,并确保不要留下任何硬链接:

git clone --no-hardlinks file:///Users/yourUser/your/full/repo/path repo-clone-name

5)这没有包括在文章中,但是我需要强行推回购

git push --force

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM