Git提交代码报错fatal: detected dubious ownership ...

贴出报错信息

复制代码
错误:fatal: detected dubious ownership in repository at 'D:/workspace/icbc'
'D:/workspace/icbc' is owned by:
feiji/Administrators (S-1-5-32-544)
but the current user is:
DESKTOP-2N2NI2S/song (S-1-5-21-978294077-503222281-1621980191-1001)
To add an exception for this directory, call:
git config --global --add safe.directory D:/workspace/icbc

这个错误是 Git 为了保护你的系统安全而新增的一项机制(从 Git 2.35.2 版本开始引入)。简单来说,Git 发现你当前登录的 Windows 用户(song)和这个代码仓库文件夹的所有者(Administrators)不一致,因此为了防止潜在的恶意代码执行,它拒绝运行。

方案一:添加到安全目录

打开git输入命令

复制代码
git config --global --add safe.directory D:/workspace/icbc

如果目录很多可以使用以下命令添加所有目录

复制代码
git config --global --add safe.directory '*'

方案二:修复文件夹所有权

方案一只是"掩耳盗铃",方案二是真正把文件夹的归属权拿回来。这通常发生在你曾经用管理员身份运行过命令行拉取代码,或者复制了别人的文件。

在 Windows 上操作如下:

  1. 右键点击 D:/workspace/icbc 文件夹,选择 "属性"
  2. 切换到 "安全" 选项卡,点击 "高级" 按钮。
  3. 在"所有者"旁边点击 "更改"
  4. 在"输入要选择的对象名称"框里,输入你当前的用户名(即报错信息里的 song),或者输入 Everyone
    • 不知道用户名? 点击"高级" -> "立即查找",在下方列表中选择你的账户(通常是 song)。
  5. 勾选 "替换子容器和对象的所有者"
  6. 点击"应用" -> "确定"。
  7. 权限更新后,再次运行 git 命令应该就能正常工作了。

偷懒方法(使用命令行)

如果你熟悉命令行,可以在 PowerShell(管理员模式)中运行以下命令来批量修复:

bash 复制代码
# 获取当前用户SID
$mySid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
# 接管目录所有权(请将路径替换为你的实际路径)
TakeOwn /F "D:/workspace/song" /R /D Y
# 设置完全控制权限
icacls "D:/workspace/zxzx_account" /grant:r "$($env:USERDOMAIN)\$($env:USERNAME):(OI)(CI)F" /T

为什么会这样?

了解原因有助于你避免下次再遇到:

  • 权限不匹配: 你的文件夹被标记为属于 Administrators 组,而你当前是以普通用户 song 登录的。
  • 安全考量: Git 担心黑客可能利用这个权限差异,在你不知情的情况下执行恶意脚本。
  • exFAT/FAT32 硬盘: 如果你的 D: 盘是移动硬盘或格式化为 exFAT/FAT32 的分区,它们不支持 Linux/NTFS 那样的精细权限管理,Git 也会报这个错。这种情况下,方案一(加白名单)是唯一实用的解决办法。

总结

场景 推荐方案
个人开发机,只有你一个人用 方案一 (加 safe.directory),省事且安全。
公司电脑/服务器,多人共用 方案二(修复所有权),更符合安全规范。
移动硬盘/U盘 开发 方案一,因为移动硬盘格式通常无法记录所有权。
相关推荐
gwf21610 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
西邮彭于晏10 小时前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
nuisthou15 小时前
git常用命令总结
git
西邮彭于晏15 小时前
Git 标签(Tag)与版本发布完整指南|附全场景命令速查表
大数据·git·elasticsearch
潘正翔16 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
InfinitePlus18 小时前
Git基本操作-命令行
git
茉莉玫瑰花茶18 小时前
TCP 全连接队列与 tcpdump 抓包
git·github·tcp·tcpdump
炸膛坦客19 小时前
Git 和 GitHub:(十四)rebase 到某个有新提交的远程仓库的分支
git·github
炸膛坦客1 天前
Git 和 GitHub:(十二)基于远程仓库的某一个分支的某一笔提交创建新分支
git·github
炸膛坦客1 天前
Git 和 GitHub:(十三)改分支名
git·github