新接手的项目,闭着眼上传了子项目文件,然后
- 提交报错:This repository(including wiki) size 1603.43 MB, exceeds 1024.00 MB.
- 查看gitee提示项目文件过大,且只有三次机会强推
解决操作: BFG工具,简单迅速,直接处理镜像文件
- 请提前备份代码!!!!!!
- 下载BFG工具 rtyley.github.io/bfg-repo-cl…
- 新建文件夹AAA 【将下载的BFG工具放到AAA】
- 命令依次执行
//进入文件夹
cd AAA
//克隆镜像文件到文件夹
git clone --mirror https://gitee.com/oldAAA.git
//或git clone --mirror git@gitee.com:oldAAA.git
//删除文件
// 不知道哪些文件需要删除的,可用以下命令查找
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')"
//【--no-blob-protection】表示删除所有分支,不加的话会保留当前分支
//【driving-wizard.git】这是我的镜像文件名,需要替换
java -jar bfg.jar --delete-folders LightExam driving-wizard.git --no-blob-protection
java -jar bfg.jar --delete-folders UnityProject driving-wizard.git --no-blob-protection
java -jar bfg.jar --delete-folders Unity-iPhone driving-wizard.git --no-blob-protection
java -jar bfg.jar --delete-folders Pods driving-wizard.git --no-blob-protection
java -jar bfg.jar --delete-folders Images driving-wizard.git --no-blob-protection
//删除文件
java -jar bfg.jar --delete-files UnityFramework.framework driving-wizard.git --no-blob-protection
//进入镜像文件,清理回收空间
cd RobotArm.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
//至此,镜像文件从1.2G 缩减到 320M
//推送到新的空仓库,查看效果
git push --mirror https://gitee.com/newAAA.git
//git push --mirror git@gitee.com:newAAA..git
// 最后拉新仓库的代码下来都运行试试,有误删的文件去原仓库或者备份代码中找
处理下gitnone文件吧,免得以后再把不必要的东西传上去
- 所有分支都检查下,我特么又踩坑了
vim .gitignore
i键 进入编辑模式
//添加配置
build/
DerivedData/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
*.xcuserstate
*.moved-aside
*.xccheckout
*.xcscmblueprint
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
.DS_Store
.zip
Carthage/Build
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
iOSInjectionProject/
.git/
# CocoaPods
Pods
!Podfile
Podfile.lock
# 个人文件
UnityFramework.framework
UnityProject/
Unity-iPhone/
LightExam/
esc键 然后输入 :wq 推出编辑
//然后
git rm -r --cached .
git add .
git commit -m "update .gitignore"
git push origin master
下面的看看就行了,我用下面的方法,只成功了一半,本地缩减的很小,强推成功,GC操作之后,远端仓库没啥变化
1.直接新建个项目
-
新建项目最简单了,但我想保留分支和历史记录,那就迁移到一个新的仓库随便搞
-
这样就会保留原来的仓库作为备份,还有一份本地备份,万无一失
-
迁移整个项目:
-
拿到旧仓库的地址【gitee.com/oldAAA.git】
-
git 新建空仓库 新地址【gitee.com/newAAA.git】
cd AAA
git clone --bare https://gitee.com/oldAAA.git
// 或者git clone --bare git@gitee.com:oldAAA.git
cd project_name.git
git push --mirror https://gitee.com/newAAA.git
//git push --mirror git@gitee.com:newAAA..git
- 新建空文件夹 AAA 依次执行上述命令,即可实现将git仓库从 oldAAA 迁移 到 newAAA.git 且保留提交记录,分支等信息。
//git push 上传结果
Enumerating objects: 31349, done.
Counting objects: 100% (31349/31349), done.
Delta compression using up to 8 threads
Compressing objects: 100% (14566/14566), done.
Writing objects: 100% (31349/31349), 1.41 GiB | 795.00 KiB/s, done.
Total 31349 (delta 16225), reused 31349 (delta 16225), pack-reused 0
remote: Resolving deltas: 100% (16225/16225), done.
remote: Powered by GITEE.COM [GNK-6.4]
remote: This repository(including wiki) size 1453.08 MB, exceeds 1024.00 MB.
remote: You only have 3 push opportunities
remote: HelpLink: https://gitee.com/help/articles/4232
remote: Repository GC: https://gitee.com/dddaz/driving-wizard-new/settings#git-gcRecommended to reduce the repository size
remote: Warning: this repository(including wiki) size 1453.08 MB exceeds 500.00 MB
remote: HelpLink: https://gitee.com/help/articles/4232
远程:由GITEE.COM [GNK-6.4]提供支持
remote:这个存储库(包括wiki)大小为1453.08 MB,超过1024.00 MB。
remote:你只有3个推送机会
remote: helpink: https://gitee.com/help/articles/4232
remote:存储库GC: https://gitee.com/dddaz/driving-wizard-new/settings#git-gcRecommended以减少存储库大小
警告:此存储库(包括wiki)大小1453.08 MB超过500.00 MB
- 然后clone新仓库,执行后面的操作
2.使用下面两种方法,清理强推
-
【1】.使用git-repo-clean工具(推荐!自动化操作,中文提示)
-
git repo-clean -i
-
然后按照提示操作就行了
-
-
清理过后还是提不上去,卡在这了,应该是强推次数超过三次了,再搞个仓库试试
-
复制会导致前面的操作失效,整个项目又变成2G了
-
【2】.命令删除文件强推
-
cd到项目路径
-
查找 提交记录中大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
- 删除 提交记录中大文件
//删除的文件的相对路径(相对于git仓库的跟目录), 替换成你要删除的文件即可. 注意一点,这里的文件或文件夹,都不能以 '/' 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH' --prune-empty --tag-name-filter cat -- --all
//如果你要删除的目标不是文件,而是文件夹,那么请在 `git rm --cached' 命令后面添加 -r 命令,表示递归的删除(子)文件夹和文件夹下的文件,类似于 `rm -rf` 命令
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch 文件名' --prune-empty --tag-name-filter cat -- --all
- 清理回收空间 彻底删除
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
- 覆盖推送
//强制覆盖的方式推送
git push origin --force --all
- 提交遇到413报错, 尝试替换为ssl提交
Enumerating objects: 10877, done.
Counting objects: 100% (10872/10872), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4898/4898), done.
Writing objects: 100% (9886/9886), 692.90 MiB | 969.00 KiB/s, done.
Total 9886 (delta 5404), reused 8923 (delta 4668), pack-reused 0
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
- 看来删除的远远不够,需要精简到1G以内
- 但是之前未上传大文件(子工程)前,项目早就超过1G了,没搞明白
Enumerating objects: 12867, done.
Counting objects: 100% (12862/12862), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5792/5792), done.
Writing objects: 100% (11873/11873), 855.51 MiB | 813.00 KiB/s, done.
Total 11873 (delta 6437), reused 10914 (delta 5697), pack-reused 0
remote: Resolving deltas: 100% (6437/6437), completed with 345 local objects.
remote: Powered by **GITEE.COM** [**GNK-6.4**]
remote: This repository(including wiki) size **2.32 GB**, exceeds **1024.00 MB**.
remote: Push rejected for repository **size exceeds limit**.
remote: HelpLink: **https://gitee.com/help/articles/4232**
To gitee.com:sdjkjl-app-ios/driving-wizard.git
! [remote rejected] dw_dev_live_1.3 -> dw_dev_live_1.3 (pre-receive hook declined)
! [remote rejected] master -> master (pre-receive hook declined)
! [remote rejected] master_onLine -> master_onLine (pre-receive hook declined)
error: failed to push some refs to 'gitee.com:sdjkjl-app-ios/driving-wizard.git'
- 删Pods等记录,然后重复上述步骤
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch Pods' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch LightExam' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch UnityProject' --prune-empty --tag-name-filter cat -- --all
3.注意点
- 上述步骤执行过程中,建议关闭SourceTree、GitHbDeskTop类的工具(与此无关),不要在项目文件夹复制等操作
- 只有三次强推机会,一定要处理干净了再去推,超过三次强推也会失败!!!!
- 强推后执行GC操作
- 然后查看仓库大小有没有变化
- GC 后 处理gitnone
vim .gitignore
//添加配置
//然后
git rm -r --cached .
git add .
git commit -m "update .gitignore"
git push origin master
- 删除本地项目,重新clone