# Git fatal: unsafe repository is owned by someone else

# 错误日志

To add an exception for this directory, call:

	git config --global --add safe.directory F:/xxx
Git failed with a fatal error.
fatal: unsafe repository ('F:/xxx' is owned by someone else)
To add an exception for this directory, call:

	git config --global --add safe.directory F:/xxx

# 解决方案

1、执行 git 命令,在 git 中把这个仓库设置为安全的仓库。

git config --global --add safe.directory F:/xxx

这个方法虽然可以解决问题,但是如果仓库很多,一个个加也不是个办法,太麻烦了。这个时候可以用方法2

2、从 Git v2.35.3 开始,可以使用 * 来表示所有仓库都是安全的。

git config --global --add safe.directory '*'

这个命令会在当前用户的 .gitconfig 文件下添加

[safe]
    directory = *

# 原因分析

现在常用的操作系统都是多用户的,如果一个本地 git 仓库可以被多个用户共享,就会非常不安全,比如可能可以被其他人恶意提交、修改项目的东西等。

当我们项目的文件夹权限属于所有人,或者没有文件夹权限(为了方便,我们可能会把项目放到可移动设备 U 盘中)时就会触发这个 git 的警告。

补充:

这个跟 windows 系统下的 git 的一个漏洞有关,在根目录下创建 C:\.git\config,会导致 git 读取根目录下的配置文件,如果攻击者使用此方式写入可执行命令,则 git 会执行。

解决方法是升级到最新的 Git 版本:https://github.com/git-for-windows/git/releases (opens new window)

在命令行提示符中执行:git --version 查看当前版本号

C:\Users\pc>git --version
git version 2.34.1.windows.1

只要版本号在 2.30.3 以后的,都会强制出现这个提示!

GitHub 仓库上可以看到具体哪次提交做了这个变更:https://github.com/git/git/commit/8959555cee7ec045958f9b6dd62e541affb7e7d9 (opens new window)

参考资料:

Git security vulnerability announced (opens new window)

git - Error updating changes_ unsafe repository ... is owned by someone else - Stack Overflow.html (opens new window)