Loading... # Gogs 大文件推送 413 解决方案 ## 📜 问题现象 ```bash Writing objects: 100% (1667/1667), 527.20 MiB | 28.05 MiB/s, done. error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 fatal: the remote end hung up unexpectedly ``` ## 🎯 问题原因 1. 服务器限制请求体积(Nginx/Gogs 默认限制) 2. Git 缓冲区不足 3. 仓库包含未管理的大文件 4. 网络传输层中断 --- ## 🔧 解决方案清单 ### 一、服务端配置(Gogs 管理员操作) #### 1. 修改 Nginx 限制(如有反向代理) ```nginx # /etc/nginx/conf.d/gogs.conf server { ... client_max_body_size 1024m; # 解除体积限制 proxy_request_buffering off; # 关闭请求缓冲 } ``` 重启服务: ```bash sudo systemctl restart nginx ``` #### 2. 调整 Gogs 配置文件 ```ini # /opt/gogs/custom/conf/app.ini [server] HTTP_POST_BUFFER_SIZE = 1073741824 # 1GB 缓冲区 [repository] MAX_GIT_DIFF_LINES = 1000000 # 差异行数限制解除 ``` 重启服务: ```bash sudo systemctl restart gogs ``` --- ### 二、客户端操作(开发者执行) #### 1. 配置 Git 超大缓冲区 ```powershell # Windows (PowerShell) git config --global http.postBuffer 2097152000 # 2GB git config --global pack.windowMemory 512m # 内存优化 ``` #### 2. 分段推送大仓库 ```bash # 分批次推送提交记录 for commit in $(git rev-list --reverse master | awk 'NR%100==0'); do git push origin $commit:refs/heads/master done git push origin master ``` #### 3. 清理历史大文件(终极方案) ```bash # 使用 BFG 工具清理 java -jar bfg.jar --delete-files '*.psd' --no-blob-protection my-repo.git # 强制重建仓库 git reflog expire --expire=now --all git gc --prune=now --aggressive git push --force ``` --- ## 🛡️ 预防措施 ### 1. 启用 Git LFS 管理 ```bash # 初始化 LFS git lfs install git lfs track "*.psd", "*.zip" # 提交属性文件 git add .gitattributes ``` ### 2. 配置全局忽略规则 ```bash # 创建全局 .gitignore echo -e "*.tmp\n*.log\nnode_modules/" >> ~/.gitignore git config --global core.excludesfile ~/.gitignore ``` --- ## 🔍 诊断命令 ### 1. 检测大文件来源 ```bash git rev-list --objects --all | awk '{print $1}' | git cat-file --batch-check='%(objecttype) %(objectsize) %(rest)' | awk '/^blob/ {print $2,$3}' | sort -n -k1 ``` ### 2. 实时推送监控 ```bash GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push -v 2>&1 | grep -E 'send|recv' ``` --- ## 📌 注意事项 1. **重启顺序**:修改配置后按序重启 ``` Nginx → Gogs → 客户端 Git ``` 2. **硬件要求**:推送 1GB+ 文件建议: - 服务器内存 ≥4GB - 磁盘剩余空间 ≥ 推送文件体积 ×3 3. **企业级方案**:超过 10GB 仓库建议: - 使用 Git Bundle 离线传输 - 搭建 Git 镜像服务器 ```bash git bundle create repo.bundle --all --max-objects=100000 ``` 最后修改:2025 年 03 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏