gitee超过1G无法push,删除大文件后空间还是没有变化解决

本文介绍了一种有效的方法来解决.git文件夹占用大量空间的问题。通过查找并移除不再需要的大文件,可以显著减小Git仓库的体积。文章提供了具体的命令行步骤,并分享了一个实例过程。

虽然把大文件删除了,但是.git文件夹还是占用很大空间,查询资料发现是因为有些文件虽然被删除了,但是gitee、github还会保留它的历史日志。
在这里插入图片描述
.git\objects\pack里有大文件

首先,我们需要找出大文件。
找出排名前 3 的 pack 记录:
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -3
 
找出大文件所在的位置
git rev-list --objects --all | grep bd97bfde4d9a108d012dd1e4685ef8ad6e1ec0ea
 
处理大文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch  uploads/files/5d37a3de481b1.pdf'
 
执行以下语句
rm -rf .git/refs/original
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
git push --force

博主因为不是一两个文件,实在整不动了,直接删库跑路了……
我做法是:

1、本地保留代码,然后删库
2、重新创建同名git路径的库
3、重新checkout一份代码库到本地,把之前本地保留的代码push
4、将原来的工程本地的master删除,重新checkout一份到本地,
这样就保留了.idea .iml等配置信息,pom也就不需要再重新导入了。

下面是官方回答:

仓库体积过大,如何减小?

仓库体积 减少空间 git rebase

概述

Gitee 平台目前对仓库的配额如下:

套餐免费版基础版标准版高级版尊享版
单仓库最大 500 MB最大 1 GB最大 1 GB最大 2 GB最大 3 GB
单文件最大 50 MB最大 100 MB最大 100 MB最大 200 MB最大 300 MB

如用户在使用过程中不小心将较大的二进制文件加入仓库,那么仓库大小很快就会超过规定的配额,用户可以通过升级到对应的套餐配额或对仓库进行历史改写瘦身,来解除系统对仓库推拉服务的锁定。

  • 套餐升级可访问:https://gitee.com/enterprises 了解
  • 仓库瘦身方案见下方:

查看存储库中的大文件

git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`

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

改写历史,去除大文件

注意:下方命令中的 path/to/large/files 是大文件所在的路径,千万不要弄错!

git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force

如果在 git filter-branch 操作过程中遇到如下提示,需要在 git filter-branch 后面加上参数 -f

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

并告知所有组员,push 代码前需要 pull rebase,而不是 merge,否则会从该组员的本地仓库再次引入到远程库中,导致仓库在此被 Gitee 系统屏蔽。

更加具体的操作可以点击文章 改写历史,永久删除git库的物理文件 查看


Gitee 存储库体积控制策略

Gitee 已将服务端的钩子切换到 GNK (Gitee Native Hook),GNK 基于 C++ 编写,使用了 Git 环境隔离等高级特定,意味着大文件检测和存储库体积检测不会再有漏网之鱼。一些用户的存储库体积已经超过了 Gitee 配额限制,而之前的钩子检测存在缺陷,无法实时拦截大存储库和大文件,当切换到 GNK 后,这些用户修改他们的存储库却无法推送到 Gitee,这让他们产生了困扰。

《Gitee 存储库体积控制策略》就这一困扰解答若干问题,详情请见:https://my.oschina.net/GIIoOS/blog/3126211

一些工具
https://github.com/newren/git-filter-repo
https://rtyley.github.io/bfg-repo-cleaner/
https://git-scm.com/docs/git-filter-branch

<think>我们正在处理用户的问题:“Gitee添加文件时显示文件被忽略的问题”。用户已经尝试设置.gitignore文件,但忽略规则似乎没有生效,或者已经提交过的文件现在想忽略却仍然被跟踪。 根据用户提供的引用,特别是引用[1]和引用[3],我们可以知道: 1. 对于已经提交到仓库的文件,即使后来在.gitignore中设置了忽略,这些文件仍然会被跟踪。因为.gitignore只对未跟踪的文件有效。 2. 要忽略已经提交的文件,需要先将这些文件从Git仓库中移除(但保留在本地),然后提交这个移除操作。命令为:`git rm --cached <file_name>` 或 `git rm --cached *.doc`(示例)。 3. 引用[2]提到了全局忽略文件的配置,但用户的问题可能更侧重于项目内的忽略。 用户的问题具体是:在Gitee(类似GitHub的代码托管平台)上,添加文件时显示文件被忽略,即文件被.gitignore规则匹配到了,所以没有被添加。但用户可能希望添加这些文件,或者已经提交过的文件现在被忽略了,但用户希望它们继续被跟踪?或者用户想解决为什么被忽略以及如何让忽略生效? 分析用户的问题描述:“Gitee 添加文件被忽略 解决方法”,可能有两种情况: 情况1:用户想添加某些文件,但是这些文件被.gitignore规则忽略了,导致无法添加。那么用户需要修改.gitignore文件,将对应文件的忽略规则移除或调整。 情况2:用户想要忽略某些文件(比如已经提交过的文件),但是设置.gitignore后,这些文件仍然被跟踪。那么需要按照引用[1]的方法,使用`git rm --cached`命令。 由于用户没有明确说明是哪种情况,我们需要分别给出解决方案。 另外,引用[4]提到了在IDEA中设置忽略文件的几种方式,但用户的问题可能并不局限于IDE,所以我们主要从Git命令的角度来解决。 因此,我们分两种情况给出解决方法: 情况一:文件被忽略导致无法添加(用户想要添加这些文件) 1. 检查.gitignore文件,查看哪些规则导致了文件被忽略。 2. 编辑.gitignore文件,删除或修改对应的忽略规则。 3. 然后重新添加文件:`git add <file_name>`。 情况二:已经提交的文件现在想忽略(但保留在本地) 1. 确保已经在.gitignore文件中添加了要忽略的文件或模式。 2. 使用命令`git rm --cached <file_name>`将文件从Git索引中移除(但保留在本地工作目录)。 3. 提交这次变更:`git commit -m "忽略文件xxx"`。 4. 推送到远程仓库(如Gitee):`git push`。 注意:使用`git rm --cached`后,文件将变为未跟踪状态,并且因为.gitignore的规则,下次不会再被自动跟踪。但是,如果文件已经被提交过,那么其他人在拉取代码后,这个文件会在他们的本地被删除(因为移除了跟踪)。所以,如果这个文件是每个开发者都需要但不想跟踪的(比如配置文件),那么通常的做法是提供一个模板,然后忽略实际的配置文件。 另外,全局忽略配置(如引用[2])可以用于忽略所有仓库中都不需要跟踪的文件(比如编辑器临时文件),但项目特定的忽略还是应该在项目内的.gitignore中设置。 步骤总结: 情况一:想添加被忽略的文件 1. 修改.gitignore 2. 然后git add 情况二:想忽略已经提交的文件 1. 修改.gitignore(添加忽略规则) 2. git rm --cached <file> (注意:如果使用通配符,确保不要误删) 3. 提交并推送 如果用户不确定是哪种情况,可以检查文件的状态: - 使用`git status`查看文件状态。如果文件显示为“未跟踪”并且出现在“未暂存”区域,但用户想添加它,那么就是情况一。 - 如果文件显示为“已修改”或“已暂存”,但用户想忽略它,那么就是情况二。 最后,我们生成相关问题,以帮助用户深入理解。</think>### Gitee添加文件被忽略的解决方法 当在Gitee添加文件时显示**文件被忽略**,通常是由于`.gitignore`规则匹配了目标文件。以下是分步解决方案: #### 🔧 情况1:忽略**已提交**的文件(需从仓库移除) 适用于:已在仓库中的文件(如日志、编译产物)需停止跟踪 ```bash # 1. 将忽略规则添加到.gitignore echo "target/" >> .gitignore # 示例:忽略target目录 # 2. 从Git索引移除(保留本地文件) git rm -r --cached target/ # 移除目录 git rm --cached *.log # 移除特定文件 # 3. 提交变更 git add .gitignore git commit -m "忽略target目录" git push origin master ``` > 📌 关键点:`--cached`参数确保本地文件不被删除[^1] #### 🔧 情况2:忽略**未提交**的文件(调整规则) 适用于:新文件被错误忽略 1. 检查`.gitignore`规则: ```bash cat .gitignore ``` 2. 修改规则(示例): ```gitignore # 允许添加所有.md文件(即使其他规则忽略) !*.md # 取消忽略特定文件 !/src/main.log ``` 3. 强制添加文件: ```bash git add -f ignored_file.md # -f 覆盖忽略规则 ``` #### 🔧 全局配置(可选) 若需全局忽略(如IDE配置文件): ```bash # 1. 创建全局忽略文件 echo ".idea/" > ~/.gitignore_global # 2. 生效配置 git config --global core.excludesfile ~/.gitignore_global ``` > ⚠️ 注意:全局规则对**已有仓库无效**,需手动移除已提交文件[^2] #### 📌 验证步骤 ```bash # 检查忽略效果 git check-ignore -v target/file.jar # 输出示例:.gitignore:2:target/ target/file.jar ``` #### 💡 常见错误解决 1. **规则不生效**: - 检查规则语法:`/dir/`表示根目录,`dir/`表示所有同名目录 - 清除缓存:`git rm -r --cached . && git add .` 2. **IDE文件被提交**: - 在`.gitignore`添加: ```gitignore # IntelliJ .idea/ *.iml ``` - 使用`.ignore`插件管理忽略规则[^4] > 📌 提示:Gitee网页端**不支持直接修改忽略规则**,需本地操作后推送[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值