处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具

这篇具有很好参考价值的文章主要介绍了处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git开发手册

git一些不常用的命令记不住,可以查看git开发手册(https://m.php.cn/manual/view/34957.html)

1、.git/objects/pack 文件过大

今天从git拉取项目进行开发的时候克隆的很慢,还以为是网速的问题。查看了一些git命令框的拉取网络速度发现网速也很快,克隆下来后才发现是.git文件夹太大,项目代码占用很小。发现了是git的问题后,就第一时间查找下是那个地方出的问题导致文件过大。

进入.git目录后发现是/objects/pack目录下面的xxx.pack文件占用过大。

2、pack文件过大出现的原因

在开发过程中有时候不小心上传了大文件,虽然后面在目录里面删除了,但会被git记录下来。这样慢慢的记录的越来越多,就变为了目前这样文件太大。出现臃肿。我们可以使用git自带的filter-branch工具或者BFG进行仓库清理。

3、使用git filter-branch清理

进入git命令框,输入命令。首先查询出3个大文件信息

git verify-pack -v .git/objects/pack/pack-xxx.idx | sort -k 3 -n | tail -3 (xxx你的.git的pack目录文件)

查询结果

73671b13992abba02a7fa56d37735d4ac01803b1 blob   62992368 62936889 132214388

在根据上面的文件名的编码ID:73671b13992abba02a7fa56d37735d4ac01803b1 查询出大文件的名称:

git rev-list --objects --all | grep 73671b13992abba02a7fa56d37735d4ac01803b1

上面的为单个查询,我们也可以直接查询多个,把上面的两个命令合并一起执行。

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')" #查询前10个大文件

通过命令查询出文件信息,然后将该文件从历史记录的所有 tree 中移除,执行命令从历史中删除指定的大文:

git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch 文件/文件夹" --prune-empty --tag-name-filter cat -- --all #文件/文件夹 是通过上面查询出来的大文件路径和名称

执行成功后需要删除和重建索引

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin 

然后设置历史记录的过期时间为现在,默认为90天。

git reflog expire --expire=now --all #所有未关联对象过期时间为现在

通过gc清理文件并优化本地存储库

git gc --aggressive --prune=now

强制提交

git push --all --force origin

执行完毕上面命令,一个大文件我们就清理完毕了,如果有多个大文件需要一个文件一个文件的执行。当大文件都清理完毕我们可以查看当前目录下个文件及目录占用空间大小

du -sh .git

如果输出文件过大,可以继续查找相关大文件进行删除。

git count-objects -v #计算解包的对象数量及其磁盘消耗量

4、高效大文件清理工具 BFG

官网地址:BFG (https://rtyley.github.io/bfg-repo-cleaner/ )BFG是git-filter-branch的替代品,官方介绍说要比 git-filter-branch 快上10~720x,本人使用了下,确实很快。值得我们去使用。需要去官网下载bfg.jar。也可以去镜像仓库下载(https://repo1.maven.org/maven2/com/madgag/bfg/)这里使用1.14.0版本。由于是jar包运行bfg需要具备java环境。简单介绍下命令,也可以自己去官网查找相关命令。

通过 --mirror  拉取自己项目的.git 文件, --mirror参数只拉取.git文件不克隆代码,防止操作失误修改项目代码。

git clone --mirrot xxx.git

查询前10个大文件

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"

通过删除目录文件删除

java -jar bfg.jar --delete-folders {dev} --no-blob-protection project.git #{dev} 删除dev目录下面的所有文件

通过文件大小删除

java -jar bfg.jar --strip-blobs-bigger-than 10M project.git #删除文件大于10M

通过文件名字删除,先通过查询大文件查询出数据,然后通过文件名称执行该命令删除:

java -jar bfg.jar --delete-files "xxxx"  project.git

java -jar bfg.jar --delete-files "xxxx" --no-blob-protection project.git

删除敏感信息

java -jar bfg.jar --replace-text pwd.txt project.git

pwd.txt自己定义需要移除数据的文本,具体语法自己可以查找相关文档。

设置过期时间为现在 & 清理文件

git reflog expire --expire=now --all && git gc --prune=now --aggressive

推送到远程

git push --mirror

最后我们在执行下 du -sh .git 命令查询一些.git文件夹大小,发现一些没有的文件我们已经清理干净了。后面需要重新从git克隆代码,不要使用之前的.git文件进行提交。否则文件会变得更大。

 文章来源地址https://www.toymoban.com/news/detail-554716.html

到了这里,关于处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git仓库清理瘦身解决 .git文件夹过大的问题

    git仓库清理找了很多资料和方案都没有很完美执行成功的;现在找到一个完美方案,分享给大家;希望能帮助大家 1、gitlab代码开发了仓库开发了五年了,代码只有10M;clone的时候要700多兆很浪费时间 2、创建分支和切换分支耗时,导致电脑崩溃 3、公司内部接入codereview服务;

    2024年02月02日
    浏览(49)
  • 【Git】git 文件夹不显示红色图标和绿色图标的问题

    在使用git提交代码时,发现项目文件夹上没有红色图标和绿色图标。 红色图标表示修改后未提交的文件夹,绿色图标表示已提交的文件夹。 若使用过程中提交的文件过多的时候,文件夹不显示红色或绿色图标,导致不知道修改了哪些文件,容易出现错误。  解决方法 1.win

    2024年02月14日
    浏览(23)
  • git 文件夹不显示红色图标和绿色图标的问题

    在使用git提交代码时,发现项目文件夹上没有红色图标和绿色图标。 红色图标表示修改后未提交的文件夹,绿色图标表示已提交的文件夹。 若使用过程中提交的文件过多的时候,不知道修改了哪些文件,容易出现错误。  解决方法: 1.按下win+r,输入regedit.exe,打开注册表编

    2024年02月05日
    浏览(38)
  • 解决gitee仓库中 .git 文件夹过大的问题

    最近,许多项目都迁移到gitee。使用的也越来越频繁,但是今天突然收到一个仓库爆满的提示。让我一脸懵逼。本文将详细为你解答,这种情况如何处理。 我收到的报错如下: 看了下,大概意思是一个仓库体积最大不能超过1GB,但是现在我已经超过3GB了。。。 我第一个想法

    2024年02月03日
    浏览(34)
  • 【GIT问题解决】---- 在【.gitignore】中添加了忽略文件或文件夹后不生效

    1. 出现问题 在已经提交过的 GIT 管理的项目中,在 .gitignore 文件中新增一些忽略的文件或者文件夹,或者直接新建 .gitignore 文件之后,新增的内容不生效。 2. 实例截图 3. 实例描述 lifecycle.js 文件已新增到 .gitignore 文件中,但是 lifecycle.js 文件修改的时候依然会上传; yarn.loc

    2024年02月04日
    浏览(47)
  • 【疑难杂症】解决 git 文件夹不显示绿色图标和红色图标的问题

    目录 一、问题描述 二、问题解决前提 【2.1】首先保证电脑本机上有TortoiseGit这个软件 【2.2】TortoiseGit下载官网 【2.3】根据自己电脑位数进行下载,这里下载的是64位 【2.4】下载好之后,一路next进行安装,配置自己的邮箱和用户名 【2.5】桌面空白位置,点击鼠标右键,出现

    2024年02月09日
    浏览(46)
  • 解决git克隆到本地的仓库文件夹不显示红色感叹号、绿色对号等图标的问题

          电脑有时候重启或者别的什么原因导致本地仓库不显示绿勾或者红色感叹号的符号 第一步: win加R然后输入regedit打开注册表 第二步: 按下面路径打开 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiers 找到如下图在Tortoise相关文件 然后重命名,原有

    2024年02月11日
    浏览(47)
  • Java文件处理(一):创建文件、遍历文件夹、删除文件/文件夹

    本篇以代码为核心,在实践中自学吧年轻人~ 要进行文件处理肯定需要 File 类啦。 File 的实例是一个实例(?),但是可以链接到本地的文件、文件夹,并对它们进行操作。 从下面的一些示例中可以看到,同一份本地文件可以拥有多个File对象;同时,构造一个File对象时传入

    2024年02月05日
    浏览(59)
  • git add 文件、文件夹

    git add 添加多个文件,文件之间以空格隔开 多次git add source目录下及子目录下所有文件,home目录下的所有.py文件 git add . ,注意 “.” 前面有空格,添加所有的文件, 或者 git add --all 添加所有的文件 git add 目的是将修改文件由工作区提交到暂存区,可以多次提交,然后commit操

    2024年02月09日
    浏览(32)
  • Git 忽略指定文件或文件夹

    1. 在.gitignore中添加忽略的文件 2. 然后在该目录执行  注意: .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。 正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。  

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包