首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我无法在Git中将父目录添加到*safe.directory*中

我无法在Git中将父目录添加到*safe.directory*中
EN

Stack Overflow用户
提问于 2022-04-12 21:38:34
回答 19查看 95.3K关注 0票数 132

在将Git更新为v2.35.2.windows.1之后,我将得到以下错误:

致命:不安全的存储库(‘F:/GitHub/my’由其他人拥有) 若要为该目录添加异常,请调用:GitHub-全局--添加safe.directory F:/GitHub/my-project

我尝试将我的项目的父目录添加到.gitconfig中,但是它不起作用。

代码语言:javascript
运行
复制
[safe]
    directory = F:/GitHub/
    directory = F:/Private/
  • 有办法解决这个问题吗?
  • “x”是别人拥有的,这到底是什么意思?

我不想将我正在处理的每个项目都添加到.gitconfig文件中。

EN

回答 19

Stack Overflow用户

发布于 2022-04-12 23:45:49

回答

这似乎与以下漏洞声明有关:https://github.blog/2022-04-12-git-security-vulnerability-announced/

我认为这与您的电子邮件关系不大,而与您文件系统上目录的所有者关系更大。您当前登录的用户是否也是该文件夹的所有者?父文件夹怎么样?另外,您是否从存储库目录中调用git?更新只有几个小时了,所以我想事情还在不断变化。

现在,如git的消息所示,执行

代码语言:javascript
运行
复制
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确实解决了我的问题。

更长的编辑:澄清

在好好睡了一觉之后,再看一遍关于这个漏洞的帖子,我想应该澄清一下。剩下的答案我会保留原样。

让我们看一下以下简单的目录结构。

代码语言:javascript
运行
复制
/home/
├─ tommy/
│  ├─ .git/
│  ├─ rental_space/
│  │  ├─ mary/
│  │  │  ├─ projects/
│  │  │  │  ├─ phone_app/
│  │  │  │  │  ├─ .git/
│  │  ├─ anthony/

在本例中,用户tommy/home下拥有自己的目录,但(出于某种原因)将空间出租给其他用户,在本例中为maryanthony

如果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上也是如此。

票数 87
EN

Stack Overflow用户

发布于 2022-04-13 04:17:56

作为@derpda said,它与已修复的Git安全漏洞相关。

至少在Linux上,您可以通过确保Git存储库的父文件夹为您所拥有来解决这个问题。如果可以适当地设置文件夹所有权,则不需要添加safe.directory配置设置。

如果您需要不同的所有权(例如,处理作为不同用户运行的服务),那么将您的文件夹添加到多值safe.directory配置设置中:

代码语言:javascript
运行
复制
git config --global --add safe.directory /path/to/project
票数 17
EN

Stack Overflow用户

发布于 2022-04-14 17:17:45

在升级到2.35.2.windows.1版本后,我在Windows上发现了同样的问题。

我能够通过获得包含.git文件夹和其中所有文件的文件夹的所有权来修复它。

这是假设您已经在存储库文件夹中的命令:

代码语言:javascript
运行
复制
takeown.exe /f . /r

注意:如果工作文件夹中有多个存储库文件夹,您可能希望递归地获得工作文件夹及其子文件夹的所有权。它需要更多的时间来执行,但您只需要执行一次。

命令在cmd.exe下如下所示

代码语言:javascript
运行
复制
takeown.exe /f C:\Users\%USERNAME%\Work /r

或者在powershell.exe或pwsh.exe下这样做:

代码语言:javascript
运行
复制
takeown.exe /f $HOME\Work /r
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71849415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档