Git LFS配置疑问:如何排除指定后缀文件不纳入LFS管理
问题分析与解决步骤
核心错误
你执行的find命令里包含echo,比如:
find user-*/data -name "*.R" -print0 | xargs -0 -i echo git lfs untrack "'{}'" | bash
这行代码只是把git lfs untrack命令打印到终端,没有真正执行。所以你的R/C++文件根本没被从LFS中移除。
正确操作步骤
- 确认
.gitattributes配置(两种配置都可用,推荐第一种语法更清晰):
/**/data/** filter=lfs diff=lfs merge=lfs -text /**/data/**.[rR] -filter=lfs -diff=lfs -merge=lfs text /**/data/**.[cC][pP][pP] -filter=lfs -diff=lfs -merge=lfs text
- 移除
echo,真正执行LFS取消跟踪、缓存移除、重新添加的命令:
# 处理所有R文件 find user-*/data -name "*.R" -print0 | xargs -0 git lfs untrack find user-*/data -name "*.R" -print0 | xargs -0 git rm --cached # 处理所有CPP文件 find user-*/data -name "*.cpp" -o -name "*.CPP" -print0 | xargs -0 git lfs untrack find user-*/data -name "*.cpp" -o -name "*.CPP" -print0 | xargs -0 git rm --cached
- 提交配置和文件变更:
git add .gitattributes git add user-*/data/*.R user-*/data/*.cpp user-*/data/*.CPP git commit -m "Migrate R/C++ files from Git LFS to regular Git tracking"
验证结果
执行以下命令确认文件已转为常规Git管理:
git check-attr -a user-004/data/get-data.R git lfs ls-files | grep -E "\.(R|cpp|CPP)$"
如果第二条命令没有输出,说明这些文件已不在LFS中。
历史记录清理(可选)
如果需要彻底移除历史提交中的LFS对象(比如之前已经把这些文件提交到LFS),可以使用git lfs migrate命令:
git lfs migrate export --include-ref=HEAD --include="*.R,*.cpp,*.CPP" --exclude="*"
注意:这个操作会修改历史提交,若仓库已共享给他人,需提前沟通。
内容的提问来源于stack exchange,提问作者tersmitten
相关产品推荐
相关产品推荐

