前言
在日常开发中,我们偶尔会将代码仓库放在移动硬盘、U 盘或者非系统盘(如 E 盘、F 盘)中。然而,当你试图在这些目录执行 git add 或 git commit 时,可能会突然遇到一个从未见过的'所有权'报错,导致无法进行任何 Git 操作。
本文将详细介绍如何解决这个问题,并深入探讨其背后的Git 安全机制以及**文件系统(exFAT/NTFS)**的底层差异。
1. 问题复现
在 Windows 的终端(CMD 或 PowerShell)中进入仓库目录时,Git 拒绝执行命令,并抛出如下错误信息:
E:\Code\MyProject> git add
fatal: detected dubious ownership in repository at 'E:/Code/MyProject'
'E:/Code/MyProject' is on a file system that does not record ownership
To add an exception for this directory, call:
git config --global --add safe.directory E:/Code/MyProject
关键报错解读
fatal: detected dubious ownership:Git 检测到该仓库的所有权'可疑'。is on a file system that does not record ownership:这是一个关键提示,表明当前文件系统(通常是 exFAT 或 FAT32)不支持记录文件所有者信息。
2. 解决方案
Git 在报错信息中其实已经给出了官方推荐的修复方案。根据你的需求,有两种解决方式:
方案一:添加目录白名单(推荐,安全)
如果你只想针对这一个特定的仓库解决问题,可以直接复制报错提示中的命令:
git config --global --add safe.directory E:/Code/MyProject
*注意:请将路径替换为你实际报错的仓库路径。
方案二:信任所有目录(一劳永逸,仅限个人电脑)
如果你经常在移动硬盘上开发,或者有大量项目都在这个磁盘分区下,对每个目录都加白名单会非常麻烦。可以使用通配符 * 来信任所有目录:
git config --global --add safe.directory "*"
⚠️ 安全提示:
此命令意味着 Git 将信任你电脑上任何位置的仓库。如果你是在公司电脑或多人共用的服务器上,建议慎用此命令;如果是私人开发机,通常是可以接受的。
3. 深度解析:为什么会出现这个问题?
这个问题并非 Git 的 Bug,而是一个安全特性。要理解它,我们需要从'Git 安全漏洞'和'文件系统差异'两个维度来看。
3.1 核心原因:CVE-2022-24765 安全漏洞
在 Git 2.35.2 版本之前,存在一个严重的安全漏洞(CVE-2022-24765)。
攻击原理:
Git 的配置文件(.git/config)非常强大,可以定义钩子(hooks)或外部命令。黑客可以在一个公共目录(比如 C:\Temp 或共享盘)创建一个伪造的 .git 目录,并在其中配置恶意的自动执行脚本。
当你无意中在这个目录下运行 git status 等命令时,Git 会加载这个恶意配置,并以执行黑客指定的代码(例如删除文件、上传隐私数据)。

