2019-01-02-github-fix-large-file-error

本文详细介绍了在GitHub上遇到超过100MB大文件上传问题的解决办法,通过使用git filter-branch命令移除commit中的大文件,实现成功上传。
titlecategorylayouttagsdate
github中遇到>100MB文件的解决办法
other
post
问题
2019-01-02 14:00:25

今天在GitHub上传文件时遇到文件大于>100MB文件的错误,如下:

GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.

因GitHub不支持大于100MB文件的问题,解决的办法就是从commit中移除该文件:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch >100MB_file_name'

运行之后再继续执行git push即可。

<think>我们正在解决的是git push时出现的`! [remote rejected] master -> master (pre-receive hook declined)`错误。 根据引用[1][2][3]的信息,这个错误是由于远程仓库的pre-receive钩子拒绝了推送。pre-receive钩子是服务器端在接收推送之前运行的脚本,用于检查推送的内容是否符合某些规则。 常见原因(根据引用[2]): 1. 推送的分支受保护(例如master/main分支),而你没有推送权限(比如只有maintainer才能推送)。 2. 提交的内容不符合项目规范(如提交信息不规范,文件大小超标等)。 3. 你的账号权限不足(如引用[3]中提到的,用户是developer账号,可能没有权限推送master分支)。 解决方案: 1. 检查分支保护设置:如果远程仓库有分支保护规则(比如GitLab中的Protected Branches,或者GitHub的Branch protection rules),那么你需要有足够的权限才能推送到该分支。如果没有权限,可以联系仓库管理员给你开放权限,或者让有权限的人合并你的代码。 2. 检查钩子脚本的具体要求:如果项目自定义了pre-receive钩子,它可能对提交信息、文件类型、文件大小等有限制。你需要了解具体的规则并调整提交以满足规则。 3. 使用非保护分支:如果无法推送到受保护分支,可以推送到其他分支(如新建一个分支),然后提交合并请求(Merge Request/Pull Request),由有权限的人审核后合并。 根据引用[3]的情况,用户是developer权限,而远程仓库的master分支可能是受保护的。因此,解决方案是: - 在本地创建一个新分支,推送到远程仓库的新分支,然后创建合并请求。 具体步骤: 步骤1:在本地创建并切换到一个新分支 ```bash git checkout -b my-feature-branch ``` 步骤2:将新分支推送到远程仓库 ```bash git push -u origin my-feature-branch ``` 步骤3:在远程仓库(如GitLab或GitHub)上创建一个合并请求(Merge Request/Pull Request),请求将my-feature-branch合并到master分支。 步骤4:等待有权限的管理员审核并合并。 另外,如果确实需要直接推送到master分支(例如你是项目管理者但分支被错误保护),可以联系管理员暂时解除分支保护,或者提升你的权限。 但是,请注意:直接推送到受保护分支通常是不被推荐的,特别是在团队协作中。使用合并请求的方式可以保证代码审核,避免错误。 如果错误是由于钩子脚本的其他规则引起的,你需要根据钩子脚本的反馈信息进行调整。例如,如果钩子脚本要求提交信息必须包含issue编号,那么你需要按照规范写提交信息。 由于引用[3]提到项目经理创建的是空项目,且用户是developer账号,所以分支保护的可能性最大。 如果以上方法都不行,可以尝试联系仓库管理员查看pre-receive钩子的具体拒绝原因(管理员可以在服务器端查看日志)。 最后,我们生成相关问题: </think>### Git推送错误 `remote rejected master -> master (pre-receive hook declined)` 解决方案 该错误表示远程仓库的 **pre-receive钩子** 拒绝了你的推送请求,通常由服务器端规则限制引起。以下是详细解决步骤: --- #### **一、核心原因分析** 根据引用[2][3],主要原因包括: 1. **分支保护规则** - 受保护分支(如`master`)禁止直接推送(常见于GitLab/GitHub)[^2] - 开发者账号权限不足(如引用[3]中developer账号无法推master分支) 2. **钩子脚本限制** - 提交信息不符合规范(如缺少Issue编号) - 文件大小/类型被限制(如禁止上传二进制文件) - CI检查未通过(如测试覆盖率不足) 3. **仓库配置问题** - 空仓库首次推送需特殊处理 - 本地与远程历史不一致 --- #### **二、分步解决方案** ##### **✅ 方案1:检查分支保护规则(推荐优先尝试)** 1. 确认分支是否受保护: ```bash # 查看远程分支保护状态(需仓库管理员权限) git ls-remote --heads origin ``` 2. **临时解决方案**: - 推送到新分支并创建合并请求: ```bash git checkout -b feature-branch # 创建新分支 git push -u origin feature-branch # 推送新分支 ``` 然后在GitLab/GitHub创建 **Merge Request** [^3] ##### **✅ 方案2:绕过钩子检查(仅限紧急情况)** ```bash # 强制跳过pre-receive钩子(需服务器权限) git push -o bypass.rules origin master ``` > ️ 警告:需管理员在服务器配置`git config receive.denyCurrentBranch ignore` ##### **✅ 方案3:检查钩子规则** 1. 联系仓库管理员获取钩子脚本规则 (常见路径:`.git/hooks/pre-receive`) 2. 典型修复操作: - 规范提交信息: ```bash git commit --amend -m "fix: resolve login issue [ref #123]" ``` - 移除大文件: ```bash git filter-branch --tree-filter 'rm -f large_file.zip' HEAD ``` ##### **✅ 方案4:空仓库首次推送** 若引用[3]的空仓库场景: ```bash # 先拉取README等基础文件 git pull origin master --allow-unrelated-histories # 再重新推送 git push -u origin master ``` --- #### **三、权限问题处理** |权限等级|可操作范围|解决方案| |:---|:---|:---| |**Developer**|只能推非保护分支|创建新分支推送[^3]| |**Maintainer**|可推所有分支|联系管理员提升权限| |**Owner**|完全控制|检查服务器钩子配置| --- #### **四、验证流程** ```mermaid graph TD A[推送被拒绝] --> B{检查错误信息} B -->|含pre-receive| C[联系管理员获取钩子规则] B -->|权限不足| D[创建新分支] C --> E[按规则修正提交] D --> F[发起合并请求] E --> G[重新推送] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值