You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从远程master分支拉取指定文件夹快照遇Git LFS 404如何解决

问题描述

需要从远程master分支获取指定文件夹(FOLDER1/SUBFOLDER1、FOLDER2)的快照副本,不需要任何提交历史、其他分支内容,后续不会对拉取到的内容做修改或回推操作。
此前使用浅克隆+稀疏检出的方案实现需求,近期执行时出现Git LFS报错:[404] Object does not exist on the server,原方案命令如下:

mkdir -p $(LOCAL_FOLDER)
cd $(LOCAL_FOLDER) 
git init
git config core.sparseCheckout true
git remote add origin git@$(REMOTE_REPO):$(GITFILE).git
echo "FOLDER1/SUBFOLDER1\nFOLDER2" > .git/info/sparse-checkout
git fetch --depth 1 origin master
git checkout -f master
报错原因

浅拉取配合稀疏检出时,Git LFS默认会扫描当前浅提交关联的所有LFS对象元数据并尝试拉取,即使对应文件不在配置的稀疏检出路径范围内;只要服务端存在任意缺失的LFS对象,就会触发404报错,和要拉取的目标文件无关。另外原命令中echo未加转义参数,\n不会被解析为换行,会导致稀疏检出配置本身失效。

解决方案

优先选择无多余依赖、最适配快照需求的方案:

方案1:git archive直接导出快照(推荐)

完全不需要初始化本地Git仓库,直接从远程分支拉取指定路径的归档快照解压即可,不会触发LFS全量扫描,也不会生成多余的.git元数据,完全匹配不需要修改、回推的使用场景:

mkdir -p $(LOCAL_FOLDER)
cd $(LOCAL_FOLDER)
git archive --remote=git@$(REMOTE_REPO):$(GITFILE).git master FOLDER1/SUBFOLDER1 FOLDER2 | tar -x

说明:该方案要求远程Git服务开启upload-archive权限,GitHub、GitLab、Gitee等主流代码托管平台、自建Git服务默认均开启该权限。如果目标路径下有LFS存储的文件,执行完上述命令后初始化临时Git仓库关联远程,再执行git lfs pull --include="FOLDER1/SUBFOLDER1/**,FOLDER2/**"即可拉取对应LFS文件。

方案2:修正稀疏检出配置+限制LFS拉取范围

如果远程服务不支持archive导出,可修正原有命令的问题,配置LFS仅拉取目标路径下的文件,跳过其他路径的LFS对象检查:

mkdir -p $(LOCAL_FOLDER)
cd $(LOCAL_FOLDER)
git init
# 配置LFS仅拉取目标路径下的对象,跳过其他路径的缺失对象检查
git config lfs.fetchinclude "FOLDER1/SUBFOLDER1/**,FOLDER2/**"
git config core.sparseCheckout true
git remote add origin git@$(REMOTE_REPO):$(GITFILE).git
# 加-e参数解析换行符,保证稀疏检出配置生效
echo -e "FOLDER1/SUBFOLDER1\nFOLDER2" > .git/info/sparse-checkout
git fetch --depth 1 origin master
git checkout -f FETCH_HEAD
# 拉取目标路径下的有效LFS文件
git lfs pull

内容的提问来源于stack exchange,提问作者icecream notebook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:09:21