清理.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提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

电脑多久清理一次灰尘合? 合理清理电脑上灰尘的科普文

《电脑多久清理一次灰尘合?合理清理电脑上灰尘的科普文》聊起电脑清理灰尘这个话题,我可有不少话要说,你知道吗,电脑就像个勤劳的工人,每天不停地为我们服务,但时间一长,它也会“出汗”——也就是积累灰尘,... 灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi