Linux下Git克隆子模块时LFS文件未下载,Windows正常的问题咨询
解决Git子模块LFS文件在Linux下无法自动下载的问题
替代弃用git lfs clone的正确操作
方式1:克隆后手动拉取所有子模块的LFS文件
先正常克隆主仓库并初始化子模块:
git clone --recurse-submodules https://gitlab.com/MyUser/MainRepo.git cd MainRepo
然后遍历所有子模块,执行LFS拉取:
git submodule foreach --recursive git lfs pull
方式2:配置Git自动处理子模块LFS
如果不想每次都手动执行拉取,可以提前配置Git:
全局配置(所有仓库生效)
git config --global submodule.recurse true git config --global filter.lfs.required true git config --global filter.lfs.smudge "git-lfs smudge -- %f" git config --global filter.lfs.clean "git-lfs clean -- %f"
配置完后,直接用原命令克隆就能自动拉取所有LFS文件:
git clone --recurse-submodules https://gitlab.com/MyUser/MainRepo.git
仓库级配置(仅当前仓库生效)
如果不想改全局设置,克隆后进入主仓库执行:
git config submodule.recurse true git config filter.lfs.required true
再更新子模块并拉取LFS:
git submodule update --init --recursive git lfs pull --recurse-submodules
Windows和Linux表现差异的原因
核心是Git LFS的过滤规则在不同系统的默认配置不一样:
- Windows上,Git for Windows这类客户端在安装LFS时,会自动把LFS的过滤规则(smudge/clean)设为全局生效,子模块初始化时会继承这些配置,自动把指针文件替换成实际的LFS文件。
- Linux上,很多时候通过包管理器安装Git LFS后,不会自动启用全局的LFS过滤规则,子模块初始化时没触发LFS的拉取逻辑,就只留下了指针文件。另外,Linux下Git的子模块默认不会自动继承主仓库的LFS配置,需要手动开启
submodule.recurse或者手动触发拉取。
内容的提问来源于stack exchange,提问作者fhw72
相关产品推荐
相关产品推荐

