Git LFS与hooks文件夹不应在.git外?Unity项目异常排查
我之前在Unity项目里用git-lfs的时候也碰到过一模一样的情况——本来应该藏在.git目录里的钩子和lfs相关文件,居然跑到项目根目录变成未追踪文件了,太闹心了。下面说说可能的原因和你需要检查/修复的步骤:
可能的核心原因
这种情况90%是git-lfs初始化时的路径配置错误,导致它把钩子文件和lfs缓存目录安装到了项目根目录,而不是标准的.git子目录里。常见的触发场景:
- 执行
git lfs install时,当前工作目录不是项目根目录,或者误加了奇怪的参数; - 你的git全局/本地配置里,
core.hooksPath被改成了项目根目录的hooks/(而不是默认的.git/hooks); - 第三方工具(比如某些Git客户端)安装git-lfs时出现了路径错误。
你需要检查的内容&修复步骤
1. 检查git的钩子路径配置
先打开终端,在项目根目录执行这两个命令,看看配置是否异常:
# 检查全局钩子路径 git config --global --get core.hooksPath # 检查当前项目的钩子路径 git config --local --get core.hooksPath # 检查git-lfs的钩子目录配置 git config --get lfs.hooksDir
正常情况下,这几个命令要么输出空(用默认的.git/hooks),要么输出.git/hooks类似的路径。如果输出是./hooks或者hooks/,那就是问题根源。
2. 确认根目录hooks/lfs文件夹的内容
打开项目根目录的hooks文件夹,看看里面是不是有pre-push、post-checkout这些带有git-lfs标识的脚本?再看lfs文件夹,是不是有objects、tmp这类缓存目录?
如果是的话,这些内容本来应该放在.git/hooks和.git/lfs目录下。
3. 修复步骤
第一步:迁移文件到正确位置
把根目录的hooks文件夹里的所有文件,移动到.git/hooks目录下(如果.git/hooks里有旧的同名文件,先备份再覆盖);把根目录的lfs文件夹整个移动到.git目录下,变成.git/lfs。
第二步:重新正确初始化git-lfs
在项目根目录执行:
git lfs install --local
这个命令会自动帮你配置好正确的钩子路径和lfs目录,确保后续操作不会再出错。
第三步:清理根目录的无效文件夹
先预览要删除的内容(避免误删):
git clean -n hooks/ lfs/
确认输出里只有这两个文件夹后,执行删除:
git clean -f hooks/ lfs/
现在再执行git status,应该就看不到这两个未追踪文件了。
第四步:验证修复效果
执行git lfs status,看看你的Unity资源是不是正常被lfs追踪;再尝试提交一个测试文件,确认根目录不会再生成hooks/lfs文件夹。
额外注意点
从你提供的.gitattributes内容来看,配置是完全没问题的,覆盖了Unity项目里需要用lfs管理的所有常见资源类型,所以问题肯定不在这。另外:
- 不要随便修改
core.hooksPath配置,除非你有特殊的钩子管理需求; - 如果是团队协作,提醒队友检查自己的git-lfs安装配置,避免同样的问题;
- 后续尽量用官方的git-lfs命令行工具操作,少用第三方客户端的自动安装功能,减少路径错误概率。
内容的提问来源于stack exchange,提问作者Jawap




