WSL Git Clone 项目识别 `.git` 问题记录
1. 问题发现
在 WSL 本地 /home/gxj/projects/ruoyi-hr-front
目录下直接从远程仓库 clone 项目:
git clone https://github.com/xxx/yyy.git
cd ruoyi-hr-front
git status
输出提示:
On branch master
Your branch is up to date with 'origin/master'.Untracked files:(use "git add <file>..." to include in what will be committed)<整个项目目录里的所有文件>
特征:
.git
文件夹存在git fsck
输出正常,仓库完整- 仓库位于 WSL 本地
/home/...
下 - Git 版本为 Linux 本地 Git (
/usr/bin/git
)
问题表现为 Git 把整个项目都标记为未跟踪文件,无法正确识别远程仓库内容。
2. 问题分析
排查要点:
- 确认
.git
完整
ls -la .git
git fsck
.git
文件夹存在git fsck
检查 100% 正常
✅ 仓库完整,无 clone 错误或损坏
- 确认 Git 版本和来源
which git
- 输出
/usr/bin/git
→ Linux 本地 Git - 排除 Windows Git 干扰
- 文件权限与索引问题
- WSL/Linux 文件系统严格区分文件权限
- Git 默认会检测文件模式 (
core.fileMode
) - 如果 clone 下来的文件权限与索引不一致,Git 会误判整个目录为未跟踪文件
3. 解决方案
- 关闭文件模式检测
git config core.fileMode false
- 重置索引,刷新工作目录
git reset --hard HEAD
- 查看状态确认
git status
输出应为:
On branch master
Your branch is up to date with 'origin/master'.nothing to commit, working tree clean
✅ Git 正常识别仓库文件,工作区干净
4. 原因剖析
- WSL 文件系统权限严格
- WSL 对 Linux 权限敏感,而 clone 下来的文件权限可能和 Git 索引记录不同
- Git 默认开启
core.fileMode
检测权限
- Git 在 Linux 下 index 识别机制
- 当工作目录的权限与索引不一致时,Git 会误判文件已修改
- 因此即使
.git
完整,也会把整个项目标红为未跟踪
- 解决方法的原理
- 设置
core.fileMode false
→ 告诉 Git 忽略文件模式变化 - 执行
git reset --hard HEAD
→ 刷新索引,重新扫描工作目录 - 最终 Git 能正确识别远程仓库内容,状态正常
5. 总结
- WSL 下 Linux Git 对文件权限敏感,clone 下来的仓库可能出现 全红未跟踪文件
- 核心解决办法:
git config core.fileMode false
git reset --hard HEAD
- 适用于 WSL 所有从远程仓库 clone 的项目,保证 Git 正常识别
.git
- 不影响提交历史和仓库完整性