美文网首页
git 仓库体积过大,如何减小?

git 仓库体积过大,如何减小?

作者: 阳光下的叶子呵 | 来源:发表于2022-09-15 18:53 被阅读0次

使用git filter-branch

彻底删除git中的文件(包括历史提交记录)
(1)查看存储库中的大文件:
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"
(2)改写历史,去除大文件:

注意:下方命令中的 path/to/large/files 是大文件所在的路径,千万不要弄错!

Git这么强大,肯定是存在可以永久删除历史记录的命令,找了一圈,发现确实有“后悔药”命令,那就是git filter-branch,通过以下命令,就可以永久删除你想要删除的任何文件,

  • 比如:path/to/large/files 替换成 IPADir/Debug/Lhahahahagolf.ipa
    4cb60a1eec75fbca3662f6721095c2 IPADir/Debug/Lhahahahagolf.ipa
    9f9ec0b483fe8465a818c8f0eb18d6 IPADir/Debug/Lhahahahagolf.ipa
    1bf776b4d09e2291b9d6ac8656ea1 Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/AMapLocationKit
git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all

path/to/large/files替换为删除文件的相对路径,并执行,如果有以下执行反馈Ref 'refs/heads/master' was rewritten,说明删除成功了。

b0m7r1c3g6.png

如果在 git filter-branch 操作过程中遇到如下提示,需要在 git filter-branch 后面加上参数 -f (出现这个错误的原因是,第一次操作成功后发现仓库大小并没有减少(可能还增大了),便进行了第二次操作)

提示:
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

// 需要在 `git filter-branch` 后面加上参数 `-f`
git filter-branch -f --tree-filter 'rm -f IPADir/Debug/Lhahahagolf.ipa' --tag-name-filter cat -- --all

并告知所有组员,push 代码前需要 pull rebase,而不是 merge,否则会从该组员的本地仓库再次引入到远程库中,导致仓库在此被 Gitee 系统屏蔽。

(3)这样的删除并不彻底,随时可以恢复文件。
// 但这样的删除并不彻底,随时可以恢复文件。
$ git reset refs/original/refs/heads/master --hard
or
$ git reflog&&git checkout $commit-SHA1
(4)因此,需要在步骤(2)git filter-branch之后,继续执行:
$ git filter-branch -f --tree-filter "rm -f config/test.c" # 个人更使用喜欢参数为--index-filter,--all filtered all refs; --tag-name-filter cat 删除原始tag
<br>#回收内存的操作
$ rm .git/refs/original/refs/heads/master # $ rm .git/refs/original 删除git的备份
 
$ git reflog expire --all --expire=now  #使所有散落的object失效
 
$ git fsck --unreachable #检查是否有散落的object, 验证数据库中对象的连接性和有效性
 
$ git gc --prune=now #git的垃圾清理车最终删除那些对象  git gc --aggressive --prune=now , --aggressive 此选项将导致git gc更积极地优化存储库,但代价是花费更多时间。\<br>--prune=<date> Prune loose objects older than date 修剪比日期更早的松散物体。可以在此之前执行 git repack -A -d 在存储库中打包解压缩的对象。 删除冗余的对象$ git fsck #检查是否还有对应的object,现在已经找不到提交的sha1了
(5)查看文件大小
du -ah .git/objects
(6) 项目根目录 隐藏文件.git文件占用存储空间变小了:(command + shift + .)点:“.”

执行以上命令,就会发现.git目录变小了。那么接下来只要把本地的记录,强制更新到远程仓库就行了。

(7)强制推到仓库: 提交变动

注意:强制更新是一个非常危险的动作,一定要确保你的本地内容是最新的,已经没有人在你之后提交了代码,否则会将其它的人提交的代码也一并删除了。

$ git push origin --tags --force
$ git push origin --all --force


# 其中master为你要推送的分支
// git push origin master --force

相关文章

网友评论

      本文标题:git 仓库体积过大,如何减小?

      本文链接:https://www.haomeiwen.com/subject/zscdortx.html