git 推送出现 “fatal: The remote end hung up unexpectedly“ 解决方案

本文介绍了使用Git LFS解决向GitLab推送大文件时遇到的卡死或错误问题的方法,包括客户端配置调整及服务端大小限制修改。
https://blog.youkuaiyun.com/qq_41241767/article/details/98181952     git 推送出现 "fatal: The remote end hung up unexpectedly" 解决方案
https://blog.youkuaiyun.com/weixin_34221775/article/details/89549235  解决gitlab限制上传大小文件的问题
https://blog.youkuaiyun.com/jjjjjj123321/article/details/84890893 使用Git LFS上传大文件到GitHub教程,以及可能会遇到的坑(使用了Git LFS却依然传不上超过100M的文件;framework库如何添加等)
 
 

问题:

使用git或者TortosieGit向Gitlab推送大文件时,会卡死或者报错”fatal: The remote end hung up unexpectedly“

解决:

使用git-lfs上传大文件依然失败:

正常使用git lfs上传结果如下:

唯一的有疑问的地方是git lfs ls-files查询没有结果,但文件.gitattributes中有,原因如下: 

修改后,git lfs ls-files查询有结果了,但在push的过程中又遇到Client error... from HTTP 413

这个413错误的意思很明显,就是push的内容过大,需要从两方面解决:

  • 客户端

在克隆/创建版本库生成的 .git目录下面修改生成的config文件增加如下:

[user]
    name = your name
    email = your email
[credential]
    helper = manager-core
[http] 
    postBuffer = 1073741824  # 1G
[filter "lfs"]
    process = git-lfs filter-process
    required = true
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
[https]
    postBuffer = 1073741824  # 1G

重新推送即可。

或者设置缓存:

$ git config http.postBuffer 1073741824
$ git config https.postBuffer 1073741824
  • gitlab服务端

调整服务端那边的大小限制,因为gitlab服务端走nginx,那在nginx的配置文件里对client_max_body_size这个字段进行设置,大小要大于你项目的大小

再次push上传,OK

 

git-lfs介绍:

1、使用 LFS : 有效的处理大文件

    LFS 并不能像"变魔术一样"处理所有的大型数据:它需要记录并保存每一个变化。然而,这就 把负担转移给了远程服务器 - 允许本地仓库保持相对的精简
    为了实现这个可能,LFS 耍了一个小把戏:它在本地仓库中并不保留所有的文件版本,而是仅根据需要提供检出版本中必需的文件。
    但这引发了一个有意思的问题:如果这些庞大的文件本身没有出现在你的本地仓库中....改用什么来代替呢? LFS 保存轻量级指针中有真实的文件数据。当你用一个这样的指针去迁出一个修订版时,LFS 会很轻易地找到源文件(不在他上面可能就在服务器上,特殊缓存)然后你下载就行了。
    因此,你最终只会得到你真正想要的文件 - 而不是一些你可能永远都不需要冗余数据。
 
 

2、安装 LFS

    LFS 尚未加入 Git 的核心二进制文件,但是它可以作为扩展使用。这意味着,使用之前我们需要提前安装。
服务端:
    目前并不是所有主机服务器都支持 LFS。 但如果你是 GitLab 用户就不必担心。如果你使用 GitLab.com 或 GitLab CE 或 EE 的中间版本,它们已经支持LFS了! 您的 管理员只需要开启LFS选项
本地机器:
    你本地安装的 Git 也需要支持 LFS。 如果你使用 Tower,一个 Git 桌面客户端,你就不需要额外安装了,因为 Tower 已经非常好地支持 Git 大文件系统。
    如果你使用命令行来运行 Git,可以选择以下方法来安装 LFS:
  • 二进制安装包:最新版本的 binary packages, 支持 Windows,Mac,Linux 以及 FreeBSD
  • Linux:Debian 和 RPM 的软件包可从 PackageCloud 获得。
  • macOS:你可以使用 Homebrew 执行“brew install git-lfs”来安装,也可以使用 MacPorts 执行“port install git-lfs”安装.
  • Windows:你可以使用包管理器 Chocolatey 执行“choco install git-lfs”来安装。
    等你的包管理器完成上述安装后,你还需要执行“ git lfs install”命令:
     
 

3、使用 LFS 追踪文件

     没有特别说明的情况下,LFS 不会处理大文件问题,因此,我们必须明确告诉 LFS 该处理哪些文件
    让我们回到“大 Photoshop 文件”的示例, 我们可以使用“ git lfs track”命令来告诉 LFS 处理“design.psd”文件:
git lfs track "design-resources/design.psd"
     项目根目录下新建了一个新文件 ".gitattributes" (如果已存在,将会被修改), ".gitattributes" 文件记录了我们用 LFS 追踪的所有的文件路径
cat .gitattributes
design-resources/design.psd filter=lfs diff=lfs merge=lfs -text
   在这之后 LFS 会处理这个文件。我们接下来只要像往常那样把这个文件提交到仓库。值得注意的是, ".gitattributes" 文件也需要提交到仓库,操作和提交其他修改文件一样:
git add .gitattributes
git add design-resources/design.psd
git commit -m "Add design file"
git push
 
追踪文件路径:
    添加单一文件如上所示就可以。但是,比如说,如果你想追踪项目里所有后缀名为 indd 的文件呢?放心,你不用手动的添加每个文件。LFS 允许你定义文件路径,就像忽略文件时的用法那样。举个例子,下面的命令会告诉 LFS 追踪所有的 InDesign 文件 — 已经存在的和以后添加的。
git lfs track "*.indd"
    你也可以告诉 LFS 追踪整个文件夹里的所有内容:
git lfs track "design-assets/*"
 
追踪文件概述:
    想知道到底有哪些文件在被 LFS 追踪。你可以简单的看看 .gitattributes文件。然而,它们不是真实的文件,而是包含一些规则和理论的文件:某些文件可能会漏掉,例如由于拼写错误或者过分严格的规则。
    想要查看你当前正在追踪的实际文件的列表,可以使用 git lfs ls-files 命令:
git lfs ls-files
194dcdb603 * design-resources/design.psd
 
 
 
 
 
<think>我们正在处理一个关于Git错误的问题,用户遇到了“fatal:Theremoteendhungupunexpectedly”的错误。根据提供的引用信息,有几个可能的原因和解决方案。让我们逐步分析:可能的原因:1.网络问题:连接不稳定或中断。2.数据量过大:特别是当仓库很大或提交的内容很大时,可能超过默认的缓冲区大小。3.远程仓库配置问题:例如远程仓库URL不正确或权限问题。4.DNS解析问题:无法解析远程仓库的主机名(如引用3中所示)。5.其他:如服务器端问题或本地Git配置问题。解决方案:1.增大http.postBuffer:如引用1中提到的,可以设置Git的http.postBuffer为更大的值(例如524288000,即500MB)。```bashgitconfig--globalhttp.postBuffer524288000```2.检查远程仓库URL:确保远程仓库的URL正确。使用`gitremote-v`查看。如果错误,可以修改:```bashgitremoteset-urlorigin<正确的URL>```3.检查网络连接:确保可以访问远程仓库(如github.com)。可以尝试ping或使用curl测试。4.检查SSH连接(如果使用SSH):确保SSH密钥设置正确,并且能连接到远程仓库。可以使用`ssh-Tgit@github.com`测试。5.检查DNS解析:如引用3中的错误,确保主机名能被解析。可以尝试更换DNS服务器或检查/etc/hosts文件。6.重试操作:有时候是临时网络问题,重试可能解决。7.分阶段推送:如果推送的数据太大,可以尝试分多次推送(例如分多次提交和推送)。8.使用SSH代替HTTPS(或反之):有时候更换协议可以解决问题。根据引用2,如果错误信息是“fatal:'origin'doesnotappeartobeagitrepository”,那么可能是远程仓库未正确设置,需要检查远程仓库的URL。根据引用4,错误可能是由于连接被远程主机关闭,建议检查网络并参考Hexo的故障排除页面(如果是Hexo项目)。因此,针对用户的问题,我们可以给出以下步骤:步骤1:检查远程仓库配置运行`gitremote-v`,确保远程仓库URL正确。如果不正确,使用`gitremoteset-url`修正。步骤2:增大缓冲区大小(针对HTTP/HTTPS)运行`gitconfig--globalhttp.postBuffer524288000`步骤3:检查网络连接尝试ping远程仓库的域名(如github.com),确保网络通畅。步骤4:尝试使用SSH(如果之前使用HTTPS)或反之如果之前使用HTTPS,可以尝试改用SSH协议。首先确保你已设置SSH密钥并添加到远程仓库账户。步骤5:分阶段推送如果推送的内容很大,可以尝试分批推送(例如,将大提交拆分成多个小提交,然后分别推送)。步骤6:检查服务器状态有时候是远程仓库服务端的问题,可以查看服务状态页面(如GitHubStatus)。步骤7:重试简单的重试有时可以解决临时问题。如果以上步骤不能解决,请提供更详细的错误信息。相关问题:1.如何设置Git的全局配置?2.如何更改远程仓库的URL?3.如何生成和添加SSH密钥到GitHub?4.如何解决Git中的“earlyEOF”错误?5.如何调试Git的网络连接问题?</think>### Git错误:`fatal: The remote end hung up unexpectedly` 解决方案 此错误通常由网络问题、数据量过大或远程仓库配置异常导致。以下是逐步解决方法: #### 1. **增大 Git 缓冲区大小** 当推送/拉取数据量过大时,需扩展缓冲区(引用[1]): ```bash git config --global http.postBuffer 524288000 # 500MB ``` #### 2. **检查远程仓库配置** - 验证远程仓库 URL 是否正确: ```bash git remote -v ``` - 若 URL 错误(引用[2]): ```bash git remote set-url origin <正确仓库地址> ``` #### 3. **解决网络连接问题** - **DNS 解析失败**(引用[3]): ```bash ping github.com # 测试域名解析 # 若失败,更换 DNS(如 8.8.8.8)或检查 hosts 文件 ``` - **SSH 连接问题**: ```bash ssh -T git@github.com # 测试 SSH 连通性 ``` #### 4. **分阶段处理大数据** 对大仓库尝试分段操作: ```bash git fetch --depth=1 # 浅层克隆 git pull --allow-unrelated-histories # 强制合并 ``` #### 5. **其他关键措施** - **重试操作**:短暂网络中断后重试 - **检查权限**:确保有仓库读写权限 - **更新 Git 版本**:`git update-git-for-windows`(Windows) - **更换协议**:HTTPS 与 SSH 互换尝试 #### 6. **针对 Hexo 等工具的特殊处理**(引用[4]) 若在 Hexo 部署中出现: ```bash rm -rf node_modules && npm install # 重置依赖 hexo clean && hexo deploy --debug # 调试模式重试 ``` --- ### 相关问题 1. **如何诊断 Git 网络连接故障的具体原因?** 2. **Git 大数据推送有哪些优化策略?** 3. **`git config --global` 和 `--local` 配置项有什么区别?** 4. **如何为 GitHub 配置 SSH 密钥并验证连接?** 5. **Hexo 部署失败时如何查看详细错误日志?**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值