本篇记录git报错fatal: detected dubious ownership的问题。

重装Windows系统、更改用户名后,磁盘里的文件夹内容没有更改,但是使用git命令时会出现以下报错:

fatal: detected dubious ownership in repository at 'XXX'
'XXX/.git' is owned by:
        (inconvertible) (S-1-5-21-XXX)
but the current user is:
        XXX/XXX (S-1-5-21-XXX)
To add an exception for this directory, call:

        git config --global --add safe.directory XXX

摸索出了3种解决方案。主要参考了这里:stackoverflow

方法1,复制出新的文件夹

偶然发现,文件夹的用户归属指向我重装系统前的用户。把文件夹复制出一份后,新文件夹的用户归属就指向了当前的用户。

问题解决。

方法2,git添加安全目录

这也是git报错信息里提示的做法。可以把某个文件夹添加为安全目录,这样git不会再报错提醒。

# 针对单一文件夹,XXX代表文件夹路径
git config --global --add safe.directory XXX

特别地,当使用*时,所有本地文件夹都会被匹配到,于是所有文件夹的fatal: detected dubious ownership报错都会解决。

这里需要区分Linux和Windows命令行在语法上的小差异。有个引号的语法差异。

  • 在Windows环境下,如cmd中:
# 针对所有文件夹
git config --global --add safe.directory *
  • 在Linux环境下,如Git Bash中:
# 针对所有文件夹
git config --global --add safe.directory '*'

方法3,更改文件夹归属

  • 右键点击需要修改的文件夹(比如.git),打开“属性”。在属性中,选择“安全”栏目,再点击“高级”(见下图)。
  • 在高级安全设置里,选择更改文件夹的所有者(见下图)。
  • 在“选择用户或组”的界面,点击“高级”(见下图)。
  • 在新打开的界面里,点击“立即查找”,然后在搜索结果里选择当前用户(见下图)。
  • 回到“选择用户或组”的界面,点击“确认”。然后回到“高级安全设置”的界面,勾选”替换子容器和对象的所有者“,点击”应用“,点击”确认“(见下图)。

问题解决。