使用SourceTree出现 POST git-receive-pack (chunked) 解决方案

本文介绍了一种解决使用SourceTree提交大文件到Git远程仓库时出现的问题的方法。主要是通过调整配置文件中的postBuffer参数来避免因文件过大导致的提交失败。
部署运行你感兴趣的模型镜像

问题描述

今天我使用的SourceTree提交到git远程仓库的时候时出现了问题
一直处于下面的这种状态

POST Git-receive-pack (chunked)

问题原因

经过查找资料发现了下面的描述

This is a bug in Git; when using HTTPS it will use chunked encoding for uploads above a certain size. Those do not work.

A trivial fix is to tell git to not chunk until some ridiculously large size value, such as:

git config http.postBuffer 524288000

原因是当远程仓库是https前缀提交时要进行编码,但是缓存大小被限制了,通过改变postBuffer的大小为500M就可以解决这个问题了
按照这个思路就有了如下的解决办法

解决办法

打开SourceTree右上角的

设置 -> 高级 -> 编辑配置文件…

来打开配置文件,在配置文件中添加如下配置

[http] 
      postBuffer = 524288000

最后保存,重新尝试推送到仓库就可以了

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

<think>我们参考了用户提供的引用内容,特别是关于pre-receive hook declined错误的常见原因和解决方法。根据引用[1][2][3][4][5],该错误通常与远程仓库的保护规则有关,特别是分支保护设置。以下是系统化的解决方案: ### 错误原因分析 `pre-receive hook declined` 表示远程仓库的预接收钩子拒绝了推送请求,常见原因包括: 1. **分支保护规则**:目标分支(如`master`、`main`)被设置为受保护分支,禁止直接推送或强制推送[^3][^4]。 2. **提交内容违规**:提交中包含超大文件(如超过100MB)、敏感信息或保留关键字(如`cherry-pick`、`revert`作为分支名)[^5]。 3. **权限不足**:用户账户没有目标分支的写入权限。 ### 解决方案步骤 #### 方法一:解除分支保护(推荐给仓库管理员) 适用于自建Git服务(如GitLab、Gitee): 1. 打开远程仓库的 **设置** → **分支保护** 或 **保护分支** 页面。 2. 找到目标分支(如`master`)的保护规则。 3. **取消勾选**以下选项: - `禁止强制推送` - `要求合并请求` - `要求管理员权限` 4. 保存设置后重新尝试推送。 > 注意:解除保护后,请确保在推送完成后重新启用保护,以防误操作。 #### 方法二:创建新分支并提交合并请求 适用于无管理员权限的开发者: 1. 在本地创建新分支并切换: ```bash git checkout -b feature-branch ``` 2. 将新分支推送到远程: ```bash git push origin feature-branch ``` 3. 在远程仓库页面发起 **合并请求(Merge Request)** 将`feature-branch`合并到`master`分支。 4. 由仓库管理员审核后完成合并。 #### 方法三:检查并修复提交内容 若错误由提交内容触发: 1. **删除大文件**(若存在): ```bash # 查找大于100MB的文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" # 使用BFG或git filter-branch清理历史(谨慎操作) ``` 2. **避免保留关键字**:检查分支名或提交信息是否包含平台保留词(如`cherry-pick`),修改后重试[^5]。 3. **移除敏感信息**:使用`git rebase -i`修改历史提交,删除密码、密钥等敏感数据。 #### 方法四:使用SSH协议提升权限 若权限不足且拥有SSH密钥: 1. 在SourceTree中切换远程URL为SSH格式(如`git@gitee.com:user/repo.git`)。 2. 配置SSH密钥到代码平台账户。 3. 重新推送。 ### 验证解决 - 成功推送后,在SourceTree中观察日志: ```mermaid graph LR A[本地提交] --推送成功--> B[origin/master] ``` - 远程仓库页面应显示最新提交的文件。 ### 预防措施 | 场景 | 预防方法 | |---------------------|--------------------------------------------------------------------------| | 保护分支误操作 | 推送前确认分支保护状态,使用`git push --force-with-lease`替代强制推送[^4] | | 提交大文件 | 添加`.gitignore`文件,使用`git rm --cached`移除已提交的大文件 | | 权限不足 | 联系仓库管理员分配写入权限 | > **重要提示**:强制推送(`--force`)可能覆盖他人提交,仅限私有分支使用[^3][^4]。 §§相关问题§§ 1. 如何在 GitLab 中设置分支保护规则? 2. 如何彻底删除 Git 历史中的大文件? 3. SourceTree 如何配置 SSH 密钥连接远程仓库? 4. 合并请求(Merge Request)的标准工作流程是什么?</think>### Git Push 被远程仓库拒绝:`pre-receive hook declined` 错误解决方法 #### 错误原因分析(基于引用内容) 该错误表示远程仓库的 **预接收钩子(pre-receive hook)** 拒绝了你的推送请求,常见原因包括: 1. **分支保护规则**:目标分支(如 `master`)被设置为受保护分支,禁止直接推送或强制推送[^3][^4] 2. **提交内容违规**:包含超大文件(>100MB)、敏感信息或保留关键字[^1][^5] 3. **权限不足**:账户无目标分支的写入权限 --- ### 解决方案(逐步操作) #### 方法一:解除分支保护(推荐给仓库管理员) 1. **登录远程仓库**(如 Gitee/GitLab) 2. 进入仓库设置 → **保护分支** → 找到 `master` 分支 3. **取消保护**: - 关闭 `禁止强制推送` - 关闭 `要求合并请求` - 关闭 `要求管理员权限` ```mermaid graph LR A[仓库设置] --> B[分支保护] B --> C[取消master分支保护] C --> D[保存更改] ``` 4. 重新推送: ```bash git push origin master ``` > ⚠️ 操作后建议重新启用分支保护[^3] #### 方法二:通过新分支推送(无管理员权限时) 1. 创建并切换到新分支: ```bash git checkout -b feature-branch ``` 2. 推送到远程: ```bash git push origin feature-branch ``` 3. 在仓库页面发起 **合并请求(Merge Request)** 4. 管理员审核后合并到 `master` #### 方法三:检查并修复提交内容 1. **删除大文件**(>100MB): ```bash # 查找大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" # 从历史中彻底删除(谨慎操作) git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件名' --prune-empty --tag-name-filter cat -- --all ``` 2. **避免保留关键字**: - 检查分支名/文件名是否包含平台保留词(如 `cherry-pick`, `revert`)[^5] - 重命名相关分支/文件 3. **移除敏感信息**: ```bash git reset HEAD^ # 撤销上次提交 git rm 敏感文件 # 删除文件 git commit -m "移除敏感信息" ``` --- ### 预防措施 | **场景** | **预防方案** | |------------------|-----------------------------------------------------------------------------| | 保护分支误操作 | 推送前用 `git push --dry-run` 测试 | | 提交大文件 | 添加 `.gitignore` 排除大文件目录(如 `node_modules/`, `*.zip`)[^1] | | 权限问题 | 在仓库设置 → 成员管理中添加开发者账户并授予写入权限 | > **关键提示**:若需强制推送,优先使用 `git push --force-with-lease`(比 `--force` 更安全)[^4] --- ### 验证成功 推送成功后检查: 1. 远程仓库文件列表更新 2. SourceTree 日志显示: ```mermaid graph LR A[本地master] -- 已同步 --> B[origin/master] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值