清理.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

相关文章

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过期

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目