回答
这似乎与此漏洞公告相关:
https://github.blog/2022-04-12-git-security-vulnerability-announced/
我认为与您的电子邮件关系不大,而更多地与您文件系统上目录的所有者有关。
您当前登录的用户是否也是该文件夹的所有者?
父文件夹呢?
另外,您是否在存储库目录内调用git?
更新时间只有几个小时,所以我想事情仍然在变化中。
目前,如git的消息所示,请执行
git config --global --add safe.directory F:/GitHub/my-project
现在确保你正在F:/GitHub/my-project
内部调用git
。
编辑:如我们在下面的评论中发现,包含 .git
文件夹(git 仓库)的父目录的所有者是问题所在。
重新克隆项目是一种平台独立的方法,可以确保你是该目录的所有者。
旁注
我在 Linux 上使用 flutter 时遇到了同样的问题,在我的 distro 中安装在 /opt/flutter
中。我没有作为 root 工作,因此我遇到了同样的问题。
运行 git config --global --add safe.directory /opt/flutter
确实为我解决了这个问题。
长篇编辑:澄清
经过一晚上的睡眠后再次查看关于漏洞的帖子,我觉得需要进行一些澄清。其余的答案保持不变。
让我们来看一下以下简单的目录结构。
/home/
├─ tommy/
│ ├─ .git/
│ ├─ rental_space/
│ │ ├─ mary/
│ │ │ ├─ projects/
│ │ │ │ ├─ phone_app/
│ │ │ │ │ ├─ .git/
│ │ ├─ anthony/
在此情况下,用户
tommy
拥有自己在
/home
下的目录,但(由于某种原因)将空间租给其他用户,这里是
mary
和
anthony
。如果
mary
错误地在她的目录中但在
phone_app
项目之外执行
git
,那么旧版的
git
会向上遍历目录树以搜索
.git
存储库。 它找到的第一个是来自
/home/tommy/.git
的存储库。 这是一个安全风险,因为另一个用户,就是可以扮演
tommy
的任何人,都可以影响
mary
对git的执行,并可能引起麻烦。从Git v2.35.2及更高版本开始,当进入的目录属于
mary
以外的用户时,遍历将立即停止。假设
mary
在
/home/tommy/rental_space/mary/projects
中执行了
git
,然后git将在
projects
中检查,但找不到
.git
。它将向上一级目录检查
mary
,但仍然找不到
.git
。然后它将再次向上移动,但
rental_space
属于
tommy
而不是
mary
。新的Git版本将在此处停止并打印我们在问题中看到的消息。将目录
/home/tommy/rental_space
添加到
safe.directory
变量中可以让git继续进行,但正如所解释的那样,这是一种安全风险。
我在此使用了类似Linux的目录结构,但在Windows上也是如此。
sudo
在根目录下构建的目录属于root
用户而不是我自己。 - Saeed Neamati