自建裸仓库推送 LFS 报 objects/batch 404:检查 LFS 服务
自建裸仓库推送 LFS 的 Batch 请求返回 404,确认服务与端点,区分客户端 install、服务部署和访问资格,再验证完整对象上传下载。
自建 Git 裸仓库配置 LFS 后,推送报 Repository or object not found,请求指向 .../info/lfs/objects/batch 并返回 404。若服务器只提供 Git 仓库访问,应先确认有没有部署可用的 LFS 服务。
在客户端或裸仓库中运行 git lfs install,不会把该仓库变成 LFS HTTP 服务。创建同名目录也不会提供 Batch API。本文针对采用 HTTP Batch API 的自建部署;其他传输协议应按自己的实现检查。
先看错误发生在 Batch 还是对象传输
在受影响的本地仓库检查以下信息。命令供读者查看现有状态,输出可能包含内部地址,分享前应脱敏:
git lfs version
git lfs env
git lfs logs last
核对 Endpoint 是否指向预期仓库和 LFS 服务,区分下载与上传端点。如果日志显示向 /objects/batch 发出的请求本身返回 404,先检查服务、路由和访问资格。
若 Batch 请求成功,但后续对象下载地址返回 404,那属于另一条路径:服务已响应,具体对象、下载地址或访问权限仍有问题。不能用“缺少 LFS 服务”解释所有对象下载失败。
LFS 的 HTTP Batch 请求用于取得对象上传或下载所需的信息,其路径由 LFS 服务地址附加 /objects/batch 构成。它需要协议规定的请求与响应,不能拿浏览器对地址做一次普通 GET 后看到 404,就认定服务不存在。
裸 Git 仓库与 LFS 服务需要分别具备
Git 仓库保存提交及 LFS 指针,大文件内容还需要相应的 LFS 存储和传输能力。git lfs install 主要配置客户端过滤器及适用的推送钩子,既不会启动监听服务,也不会给 Web 服务器增加 Batch 路由。
自建部署可以启用托管平台已有的 LFS 支持,或由管理员部署与客户端兼容的 LFS 服务,并配置仓库授权、对象存储、上传下载路径和反向代理。已有独立服务时,先确认它对这个仓库和账户开放,不能仅确认进程在运行。
管理员给出的 LFS 端点可能与 Git remote 地址不同,应检查是否需要仓库级的 lfs.url、remote.<remote>.lfsurl 或专用上传地址设置。修改前记录原配置和来源,只采用自己部署中确认的地址;不要猜测一个 URL 后把所有仓库的全局配置都改掉。
.lfsconfig 也可能提供端点设置。检查有效配置时,要一起看本地配置和仓库中的文件,防止客户端仍访问旧服务。端点变更不会自动搬迁已经上传的大文件,迁移前仍需确认旧存储保留和对象转移方式。
服务存在时,按访问与路由继续判断
404 也可能是仓库路径错误,或该账户没有访问资格。LFS Batch 协议允许在用户无法访问仓库时返回 404,因此不能仅依据这一个状态码确认服务器没有部署服务。
如果管理员确认服务可用,应对照客户端实际端点检查仓库名称、代理路径及认证范围。普通 Git 访问成功不保证 LFS 端点采用相同地址或完全相同的认证处理。不要通过关闭 TLS 验证或给匿名用户开放所有对象来绕过访问问题。
处理后应完成一次获准的 LFS 对象上传,再从另一份受控工作副本取得对应内容,确认拿到真实文件而非指针文本。推送提交成功、过滤器不再报错或跳过 LFS 下载,都不足以证明大文件已经能被其他使用者取到。
在对象完整性确认前保留本地文件与原 LFS 存储。需要回退端点配置时还原已记录的值;不要在服务迁移尚未核对时清理本地对象缓存,以免失去尚未上传的文件。


