清理.git中的无用文件

2024-08-21 09:38
文章标签 清理 git 无用

本文主要是介绍清理.git中的无用文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先看下清理之前的目录大小
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:05:08]
$ du -ah
······20K    ./.git/objects/pack/pack-3f4446b1e86d2111d80dd9ffd0ca30c3669f9145.idx18M    ./.git/objects/pack/pack-3f4446b1e86d2111d80dd9ffd0ca30c3669f9145.pack18M    ./.git/objects/pack18M    ./.git/objects
······18M    .

以下操作需谨慎,非常危险!别到时候从删库到跑路了

找出git中前几个大文件
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:09:03]
$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
d012feaf2caa9c236d1cd9c0936384296918288f blob   598978 520889 3158357
14104ce1fdce0275b2a11892691cb62c7882c8ed blob   762747 678885 1437035
0357e0fce32c35556b2ae2af88547b01c0be5082 blob   817936 724516 3906877
e05df3311f9c10e0fc975958746d013579f978a6 blob   1584904 720055 5426917
9069ef6ec87e24b3079333ff5de4c7217e195e6a blob   1971488 795297 4631620
第一行的字母相当于文件的id,用以下命令找出id对应的文件名
git rev-list --objects --all | grep <大文件id>
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:12:04]
$ git rev-list --objects --all | grep d012feaf2caa9c236d1cd9c0936384296918288f
d012feaf2caa9c236d1cd9c0936384296918288f target/scmtest/WEB-INF/lib/spring-test-4.3.7.RELEASE.jar# bowang @ localhost in ~/mytest/scmtest on git:master o [10:13:52]
$ git rev-list --objects --all | grep 14104ce1fdce0275b2a11892691cb62c7882c8ed
14104ce1fdce0275b2a11892691cb62c7882c8ed target/scmtest/WEB-INF/lib/spring-beans-4.3.7.RELEASE.jar# bowang @ localhost in ~/mytest/scmtest on git:master o [10:13:59]
$ git rev-list --objects --all | grep 0357e0fce32c35556b2ae2af88547b01c0be5082
0357e0fce32c35556b2ae2af88547b01c0be5082 target/scmtest/WEB-INF/lib/spring-web-4.3.7.RELEASE.jar
最重要的两条命令是 git filter-branch 和 gc, filter-branch 真正在清理,但是只运行它也是没用的,需要再删除备份的文件,重新打包之类的,最后的gc命令,用来收集产生的垃圾,最终清除大文件
git filter-branch --force --index-filter \'git rm --cached --ignore-unmatch <无用的大文件>' \--prune-empty --tag-name-filter cat -- --all
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:14:18]
$ git filter-branch --force --index-filter \'git rm --cached --ignore-unmatch target/scmtest/WEB-INF/lib/spring-test-4.3.7.RELEASE.jar' \--prune-empty --tag-name-filter cat -- --all
Rewrite 3d89aac1ab30081b4337250b764f853763241e67 (150/189) (6 seconds passed, remaining 1 predicted)
······
清理大文件
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:16:45]
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin# bowang @ localhost in ~/mytest/scmtest on git:master o [10:23:24]
$ git reflog expire --expire=now --all# bowang @ localhost in ~/mytest/scmtest on git:master o [10:23:29]
$ git gc --prune=now
Counting objects: 656, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (301/301), done.
Writing objects: 100% (656/656), done.
Total 656 (delta 224), reused 611 (delta 220)
查看目录大小 a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式
du -ah
# bowang @ localhost in ~/mytest/scmtest on git:master o [10:23:38]
$ du -ah
······20K    ./.git/objects/pack/pack-7ecdea2bc0c50abbe05898f9bf8c7db56bed701a.idx
5.5M    ./.git/objects/pack/pack-7ecdea2bc0c50abbe05898f9bf8c7db56bed701a.pack
5.6M    ./.git/objects/pack
5.6M    ./.git/objects
······
5.8M    .
改动提交到远端仓库
git push --force --verbose --dry-run
git push --force

这篇关于清理.git中的无用文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092800

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

如何清理MySQL中的binlog问题

《如何清理MySQL中的binlog问题》:本文主要介绍清理MySQL中的binlog问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目http://www.chinasem.cn录清理mysql中的binlog1.查看binlog过期时间2. 修改binlog过期