- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
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文件进行提交。否则文件会变得更大.
。
最后此篇关于处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具的文章就讲到这里了,如果你想了解更多关于处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
从命令行选项我看不出有没有办法在执行之前查看 bfg 会做什么。 如果我运行这个命令: $ bfg --strip-blobs-bigger-than 1M --replace-text banned
所以我在之前的提交中错误地提交了我的 secrets.yml(哎呀!!)我想清理我的 git 提交历史。看来最简单的禁食方法是使用BFG。我已经下载了 jar 文件并安装了 Java 是必需的,并且我
我按照文档使用 BFG repo cleaner我读过 “最好删除所有旧克隆” 但不确定删除哪个以及如何删除它。我正在将所有内容推送到 bitbucket。 我现在有 2 个 repos 的目录 /.
我想从我的 git 仓库中删除两个不再存在的文件。 我将它们放入、提交并尝试 push ,但它们太大了。所以我把它们拿出来,继续工作,然后 promise ,试图 push ,但它仍然给了我同样的错误
git filter-branch 花费了很长时间。幸运的是,我找到了BFG repo-cleaner . 但它意外地改变了我上次提交的内容。 $ git clone --mirror example
我从 SVN 迁移到 git,并且在每个 git 提交中都有一个注释引用 SVN 修订号。 repo 导入后,我使用 BFG repo 清理器从二进制文件和其他垃圾中清理 git 历史记录。不幸的是,
所以我按照此处的说明运行了 BFG。 https://rtyley.github.io/bfg-repo-cleaner/ BFG 的控制台输出看起来不错,但是在推送之后,当我回到 github 时,
我需要从我的网络应用程序和 git 历史记录中删除配置文件。我已经使用 bfg repo cleaner 工具完成了该操作。我完成了文档中概述的步骤: git clone --mirror url.g
BFG Repo Cleaner站点给出了使用该工具清理存储库的示例如下: 克隆您的存储库的新副本。 $ git clone --mirror git://example.com/some-big-r
我不知道使用 BFG 删除大/敏感文件的干净方法,并且错过了一个关键步骤:git clone --mirror git://example.com/some-big-repo.git 其中,当我尝试推
我们目前正在将我们的 SVN 存储库迁移到 GIT(托管在 bitbucket 上)。 我使用 subgit 将我们所有的分支/历史导入到我在(Windows)PC 本地拥有的裸仓库中。 存储库非常大
我即将一头扎进 Zope 领域,并且想知道哪个框架更适合我的需求。我有一些使用 django 的经验,我切换到基于 zope 的框架的主要原因是 ZPT,并且偶尔也需要使用 Plone 做一些事情。两
我正在尝试减小较大存储库(~3.4 G)的大小,而 bfg-repo-cleaner 似乎是减小其大小的完美工具。 我按照文档中的描述运行了该工具,但只看到存储库的大小略有减少。特别令人惊讶的是,该工
我正在尝试永久删除 Git 存储库中所有目录的所有痕迹除了一个目录,比如名为 keep-me 的目录。 对于此类任务,BFG 存储库清理器是我常用的工具。但是,它似乎不支持此操作(事实上,我认为它不支
由于部署问题,我们正在尝试将我们的 git 存储库缩小到 500MB 以下。 为实现这一目标,我们创建了一个新分支,我们已将所有旧图像、视频和字体移至 AWS S3。 我可以使用 git diff -
我正在使用 bfg从(克隆的)git 存储库中删除一些子目录: java -jar bfg-1.12.12.jar --delete-folders {folder1,folder2,folder3}
我有大文件并尝试使用新的 Git LFS 系统。 我发布了这个问题 - Git lfs - "this exceeds GitHub's file size limit of 100.00 MB" E
在使用 BFG (https://rtyley.github.io/bfg-repo-cleaner/) 清理 repo 时,遇到以下问题: Protected commits -----------
我正在尝试从 Git 历史记录中永久删除一个文件,因为它包含敏感数据。 为此,我使用 bfg:https://rtyley.github.io/bfg-repo-cleaner/ 该文件名为 app/
有没有人尝试过通过 LDAP/AD (OpenLDAP/ActiveDirectory) 使用身份验证机制?任何中间件来自动化这些事情? 最佳答案 我建议查看 repoze.who .它有一个用于 L
我是一名优秀的程序员,十分优秀!