-
Notifications
You must be signed in to change notification settings - Fork 2
Git操作 仓库文件夹占用太大如何解决
bin4xin edited this page Apr 29, 2022
·
1 revision
查看一下对应文件夹下的占用,过分臃肿。
[bin4xin.github.io]-git:(main)>du -d 1 -h
56K ./_includes
604K ./_posts
48K ./_primaryindex
56K ./_layouts
96K ./_drafts
8.0K ./_plugins
8.0K ./.github
273M ./.git
40M ./assets
315M .
TIPS:
一个Git仓库提交代码前需注意项目根目录创建
.gitignore
文件,顾名思义:Git忽略上传的,在上传之前一定要检查,且尽量不要提交大容量二进制文件若非必要更多可以参考Wiki Git操作-Git全局禁止上传
.DS_Store
Gemfile.lock
*.swp
*~
# Editor directories and files
.bundle
vendor
.idea
.vscode
_site
.sass-cache
.jekyll-cache
.jekyll-metadata
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
- 1)查找出大文件
$ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
- 当然也可以适当加大范围
tail -5 -> tail -500
,方便排查哪些文件是历史已经上传上去而当下已经不需要的; - 假设删除
e0e1dc539347746ae0481378660fc8f69be82b06 backup/归档.zip
- 2)删除
$ git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch backup/归档.zip' --tag-name-filter cat -- --all
- 或者确认文件夹已经不使用的情况下可以直接删除文件夹
backup/归档.zip -> backup
- 3)重复上述的2)命令几次,大致确定1)查找出的文件都是不需要的情况下,往下执行;
此次删除的基本都是陈图和备份:
>history|grep "git filter-branch"
9007 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch chrome-linux.zip'
9963 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch static' --tag-name-filter cat -- --all
9972 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/blog/2016/' --tag-name-filter cat -- --all
9973 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/events/' --tag-name-filter cat -- --all
9974 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch _site/' --tag-name-filter cat -- --all
9976 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/blog/2018/' --tag-name-filter cat -- --all
9977 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/blog/2017/' --tag-name-filter cat -- --all
9978 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/slides/' --tag-name-filter cat -- --all
9979 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/project/' --tag-name-filter cat -- --all
9980 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/service/' --tag-name-filter cat -- --all
9987 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch backup' --tag-name-filter cat -- --all
9988 git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch assets/img/blog/2015/' --tag-name-filter cat -- --all
- 4)强制推送仓库
$ git push --force --all
- 5)等待4)完成后,服务端的仓库基本就完成了所操作的占用减少,我们所感知的就是克隆的时候仓库体积会相对来说小一些;
- 6)本地仓库减少占用,执行如下:
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now`
操作后从315M 减少-> 87M
:
[bin4xin.github.io]-git:(main)>du -d 1 -h
56K ./_includes
604K ./_posts
48K ./_primaryindex
56K ./_layouts
96K ./_drafts
8.0K ./_plugins
8.0K ./.github
46M ./.git
40M ./assets
87M .
以上。
wiki 贡献者 Bin4xin • feifei1606 • codecat