在将Git更新为v2.35.2.windows.1
之后,我将得到以下错误:
致命:不安全的存储库(‘F:/GitHub/my’由其他人拥有) 若要为该目录添加异常,请调用:GitHub-全局--添加safe.directory F:/GitHub/my-project
我尝试将我的项目的父目录添加到.gitconfig
中,但是它不起作用。
[safe]
directory = F:/GitHub/
directory = F:/Private/
我不想将我正在处理的每个项目都添加到.gitconfig
文件中。
发布于 2022-04-12 23:45:49
回答
这似乎与以下漏洞声明有关:https://github.blog/2022-04-12-git-security-vulnerability-announced/
我认为这与您的电子邮件关系不大,而与您文件系统上目录的所有者关系更大。您当前登录的用户是否也是该文件夹的所有者?父文件夹怎么样?另外,您是否从存储库目录中调用git?更新只有几个小时了,所以我想事情还在不断变化。
现在,如git的消息所示,执行
git config --global --add safe.directory F:/GitHub/my-project
并确保您现在正在从git
内部调用F:/GitHub/my-project
。
编辑:正如我们在下面的注释中所发现的,包含.git
文件夹( git存储库)的目录的父目录的所有者是问题所在。
重新克隆项目是一种独立于平台的方法,可以确保您是所有者。
侧纹
我在Linux上遇到了同样的问题,我的发行版安装在/opt/flutter
中。我不是作为根工作,因此我遇到了同样的问题。运行git config --global --add safe.directory /opt/flutter
确实解决了我的问题。
更长的编辑:澄清
在好好睡了一觉之后,再看一遍关于这个漏洞的帖子,我想应该澄清一下。剩下的答案我会保留原样。
让我们看一下以下简单的目录结构。
/home/
├─ tommy/
│ ├─ .git/
│ ├─ rental_space/
│ │ ├─ mary/
│ │ │ ├─ projects/
│ │ │ │ ├─ phone_app/
│ │ │ │ │ ├─ .git/
│ │ ├─ anthony/
在本例中,用户tommy
在/home
下拥有自己的目录,但(出于某种原因)将空间出租给其他用户,在本例中为mary
和anthony
。
如果mary
错误地在她的目录中执行git
,但在她的phone_app
项目之外,那么旧git
就会在目录树上搜索.git
存储库。它发现的第一个是来自/home/tommy/.git
的。这是一种安全风险,因为在这种情况下,任何可以充当tommy
的用户都可能影响mary
的git执行,并可能造成麻烦。
从Gitv2.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上也是如此。
发布于 2022-04-13 04:17:56
作为@derpda said,它与已修复的Git安全漏洞相关。
至少在Linux上,您可以通过确保Git存储库的父文件夹为您所拥有来解决这个问题。如果可以适当地设置文件夹所有权,则不需要添加safe.directory
配置设置。
如果您需要不同的所有权(例如,处理作为不同用户运行的服务),那么将您的文件夹添加到多值safe.directory
配置设置中:
git config --global --add safe.directory /path/to/project
发布于 2022-04-14 17:17:45
在升级到2.35.2.windows.1版本后,我在Windows上发现了同样的问题。
我能够通过获得包含.git文件夹和其中所有文件的文件夹的所有权来修复它。
这是假设您已经在存储库文件夹中的命令:
takeown.exe /f . /r
注意:如果工作文件夹中有多个存储库文件夹,您可能希望递归地获得工作文件夹及其子文件夹的所有权。它需要更多的时间来执行,但您只需要执行一次。
命令在cmd.exe下如下所示
takeown.exe /f C:\Users\%USERNAME%\Work /r
或者在powershell.exe或pwsh.exe下这样做:
takeown.exe /f $HOME\Work /r
https://stackoverflow.com/questions/71849415
复制相似问题