Git 实战:将 270MB 项目成功推送到 Gitee 遇到的坑
目录Git 实战将 270MB 项目成功推送到 Gitee 遇到的坑问题背景一、初始化 Git 仓库1. 创建仓库2. 配置用户信息3. 创建 .gitignore4. 添加并提交二、连接远程仓库1. 添加 Gitee 远程仓库2. 验证远程仓库三、首次推送失败1. 尝试推送2. 错误信息3. 问题分析四、排查大文件1. 检查仓库大小2. 找出占用空间最大的文件3. 发现的大文件五、清理大文件1. 更新 .gitignore2. 从 Git 暂存区移除3. 提交更改六、重写 Git 历史1. 使用 filter-branch 重写历史2. 清理引用日志3. 垃圾回收4. 验证清理效果七、增加 Git 缓冲区八、处理远程仓库冲突1. 拉取远程更改2. 解决冲突3. 提交合并九、成功推送1. 强制推送2. 推送结果十、完整命令清单十一、经验总结推送失败的常见原因不应该提交的文件Git 最佳实践问题背景在将 Hermes AI 框架项目推送到 Gitee 时遇到了推送失败的问题error: RPC failed; curl 55 Send failure: Connection was reset fatal: the remote end hung up unexpectedly项目初始大小达到270MB导致推送频繁中断。本文记录了从问题排查到成功推送的完整过程。一、初始化 Git 仓库1. 创建仓库git init2. 配置用户信息git config --global user.name Your Name git config --global user.email your-emailexample.com3. 创建 .gitignore# Dependencies node_modules/ */node_modules/ # Build outputs dist/ */dist/ dist-electron/ */dist-electron/ # IDE .vscode/ .idea/ # OS .DS_Store Thumbs.db # Logs *.log npm-debug.log* # Environment .env .env.local4. 添加并提交git add . git commit -m Initial commit: Hermes AI assistant project二、连接远程仓库1. 添加 Gitee 远程仓库git remote add origin https://gitee.com/your-username/repository.git2. 验证远程仓库git remote -v输出origin https://gitee.com/your-username/repository.git (fetch) origin https://gitee.com/your-username/repository.git (push)三、首次推送失败1. 尝试推送git push -u origin master2. 错误信息Enumerating objects: 6623, done. Counting objects: 100% (6623/6623), done. Delta compression using up to 12 threads Compressing objects: 100% (6605/6605), done. error: RPC failed; curl 55 Send failure: Connection was reset send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly3. 问题分析推送失败的原因仓库过大270MB网络连接不稳定Git 默认缓冲区大小限制四、排查大文件1. 检查仓库大小git count-objects -vH输出count: 6626 size: 294.95 MiB in-pack: 0 packs: 0 size-pack: 0 bytes2. 找出占用空间最大的文件git ls-tree -r -l HEAD | ForEach-Object { $parts $_ -split \s if ($parts[3] -match ^\d$ -and [int]$parts[3] -gt 5000000) { $([math]::Round([int]$parts[3]/1MB, 2)) MB - $($parts[4]) } } | Sort-Object -Descending | Select-Object -First 303. 发现的大文件文件大小类型hermes-web/release/win-unpacked/智能助手.exe172MBElectron 打包产物.npm-cache/_cacache/content-v2/...43MBnpm 缓存.npm-cache/_cacache/content-v2/...37MBnpm 缓存hermes-web/release/win-unpacked/icudtl.dat9.98MBElectron 资源hermes-web/release/win-unpacked/LICENSES.chromium.html9.01MBElectron 资源hermes-web/release/win-unpacked/resources/app.asar9MBElectron 资源hermes-web/release/win-unpacked/libGLESv2.dll7.69MBElectron 资源结论release/和.npm-cache/目录占用了绝大部分空间这些文件不应该提交到 Git。五、清理大文件1. 更新 .gitignore# Build outputs dist/ */dist/ dist-electron/ */dist-electron/ release/ */release/ # npm cache .npm-cache/ */.npm-cache/2. 从 Git 暂存区移除git rm -r --cached hermes-web/release/ .npm-cache/3. 提交更改git commit -m Remove large files: release/ and .npm-cache/六、重写 Git 历史由于大文件已经在 Git 历史中需要彻底清理1. 使用 filter-branch 重写历史git filter-branch --force --index-filter \ git rm -r --cached --ignore-unmatch hermes-web/release .npm-cache \ --prune-empty -- --all这个过程会遍历所有提交从历史中移除指定文件。2. 清理引用日志git reflog expire --expirenow --all3. 垃圾回收git gc --prunenow --aggressive4. 验证清理效果git count-objects -vH七、增加 Git 缓冲区git config --global http.postBuffer 524288000将缓冲区设置为 500MB避免大文件推送时连接中断。八、处理远程仓库冲突1. 拉取远程更改远程仓库创建时包含了 README.md与本地提交产生冲突git pull origin master --allow-unrelated-histories2. 解决冲突编辑README.md删除冲突标记保留正确内容 HEAD # 本地内容 # 远程内容 origin/master3. 提交合并git add README.md git commit -m Merge: resolve README.md conflict九、成功推送1. 强制推送git push -u origin master --force2. 推送结果Enumerating objects: 213, done. Counting objects: 100% (213/213), done. Delta compression using up to 12 threads Compressing objects: 100% (163/163), done. Writing objects: 100% (211/211), 640.75 KiB | 49.29 MiB/s, done. Total 211 (delta 46), reused 207 (delta 45), pack-reused 0 (from 0) remote: Resolving deltas: 100% (46/46), done. To https://gitee.com/your-username/repository.git b3a4152..f2bdd08 master - master branch master set up to track origin/master.从 270MB 优化到 640KB推送成功十、完整命令清单# 1. 初始化仓库 git init # 2. 配置用户信息 git config --global user.name Your Name git config --global user.email your-emailexample.com # 3. 添加并提交 git add . git commit -m Initial commit # 4. 连接远程仓库 git remote add origin https://gitee.com/your-username/repository.git # 5. 处理冲突如有 git pull origin master --allow-unrelated-histories # 解决冲突后 git add . git commit -m Merge conflict resolved # 6. 清理大文件 git rm -r --cached release/ .npm-cache/ git commit -m Remove large files # 7. 重写历史 git filter-branch --force --index-filter \ git rm -r --cached --ignore-unmatch release .npm-cache \ --prune-empty -- --all # 8. 清理和压缩 git reflog expire --expirenow --all git gc --prunenow --aggressive # 9. 增加缓冲区 git config --global http.postBuffer 524288000 # 10. 强制推送 git push -u origin master --force十一、经验总结推送失败的常见原因原因解决方案仓库过大清理大文件重写历史缓冲区不足增加http.postBuffer网络不稳定重试或使用 SSH远程有内容git pull --allow-unrelated-histories不应该提交的文件❌node_modules/- 依赖目录❌dist/- 构建产物❌release/- 打包输出❌.npm-cache/- 包管理器缓存❌.env- 环境变量❌*.log- 日志文件Git 最佳实践✅ 初始化前先配置.gitignore✅ 提交前检查git status✅ 大文件使用 Git LFS✅ 定期清理 Git 历史✅ 使用 SSH 代替 HTTPS更稳定