“git submodule update” 失败,出现“严重:在存储库中检测到可疑所有权...”

2024-10-18 09:00:00
admin
原创
75
摘要:问题描述:我在我的 Linux 工作站上安装了一个新的硬盘驱动器。它看起来运行良好。我想在新磁盘中下载一些存储库。因此我执行git clone XXX,它运行良好。但是当我cd进入文件夹并执行时git submodule update --init --recursive。它失败了,并显示fatal: det...

问题描述:

我在我的 Linux 工作站上安装了一个新的硬盘驱动器。它看起来运行良好。我想在新磁盘中下载一些存储库。因此我执行git clone XXX,它运行良好。但是当我cd进入文件夹并执行时git submodule update --init --recursive。它失败了,并显示

fatal: detected dubious ownership in repository at '/media/data/users/jhu3szh/serialize'
To add an exception for this directory, call:

git config --global --add safe.directory /media/data/users/jhu3szh/serialize

我以为这只是一个小警告,所以我就执行了git config --global --add safe.directory /media/data/users/jhu3szh/serialize。但是,当我再次执行 Git 子模块时,出现了更多类似的错误。存储库中有许多子模块。

对于所发生的事该如何解释?


解决方案 1:

消除所有safe.directory警告

总结

屏蔽所有与 Gitsafe.directory系统相关的警告。确保了解自己正在做什么。

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

长版本

改编自这篇关于我无法将父目录添加到Git 中的safe.directory 的帖子。

我遇到了同样的问题,并通过禁用安全目录检查解决了它,这将结束所有“不安全的存储库”错误。

可以通过运行以下命令来完成1:

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

这会将以下设置添加到您的全局.gitconfig文件中:

[safe]
    directory = *

在禁用之前,请确保您了解此安全措施及其存在的原因。如果您的存储库存储在共享驱动器上,则不应执行此操作。

但是,如果您 100% 的时间都是您的机器的唯一用户,并且您的存储库存储在本地,那么禁用此检查理论上不会增加​​风险。

另请注意,您目前无法将其与文件路径结合使用,而这在我的例子中是相关的。该命令不会将通配符解释*为运算符本身 - 它只是将"*"参数理解为“禁用安全存储库检查/将所有存储库视为安全”。


1 - 如果这在 Windows 中的特定终端程序中失败,请尝试用双引号而不是单引号将通配符括起来(通过此 GitHub 问题):
git config --global --add safe.directory "*"

解决方案 2:

我遇到了同样的问题,并通过更改目录的所有者解决了该问题,例如,

chown -R <current_user> <repo_folder>

解决方案 3:

如果操作系统是 Windows,则必须使用以下命令获取文件的所有权

takeown /F <dir/*> /R

/F参数是文件,用*通配符将应用于所有文件和文件夹;

/R参数表示递归。它将所有者应用于当前登录的用户,也应用于所有文件和子文件夹

<dir/*>是要取得所有权的目录。

解决方案 4:

如果在NTFS /Windows上出现同样的问题,请确保文件夹的父文件夹.git.git文件夹本身都归您运行的同一用户所有git.exe

仅更改同一组(管理员)或仅更改父级可能不起作用。

可以通过右键单击文件夹 → 属性 → 安全选项卡 → 高级(窗口右下角)→ 所有者来编辑权限。可能需要在同一窗口中禁用继承。此问答中有提示。

您可以在资源监视器git.exe中检查您运行的用户:任务管理器 → 性能 → 打开资源监视器(在底部)。可能需要启用隐藏的“用户名”列。
如果那里缺少 Git 相关的可执行文件,请在打开资源监视器时进行虚拟提取或提取,以确保已添加它们。

解决方案 5:

我在Git Bash中运行以下命令来解决这个问题:

git config --global --add safe.directory C:/User/username/source/myproject

如果需要,请关闭并重新打开 Visual Studio Code。

解决方案 6:

确保您使用的是正确的终端用户。对我来说,我临时更改为root用户,这可能会导致问题。我改回标准用户su git-user,错误就消失了。

解决方案 7:

在磁盘上创建一个新目录,当前用户是该新目录的所有者。在此新目录中,克隆您的 Git 存储库。

解决方案 8:

当我从 PHP 执行 Git 命令时,我在 Ubuntu/ LEMP上收到相同的错误消息。以前的答案中没有任何建议可以帮助解决问题。

解决方案:
您需要设置隐藏“.git”文件夹的正确所有者。

在我的例子中,Git 命令由“www-data”用户(即 Web 服务器用户)执行:

sudo chown www-data:<current_user> -R .git

要恢复从命令行使用 Git 的能力,您需要允许组写入:

sudo chmod g+w -R .git

解决方案 9:

如果您需要为没有主目录的服务用户(例如www-data )工作,您应该考虑通过 Git 系统配置来对其进行 Git 配置:

sudo git config --system --add safe.directory /my/repos/repofolder

解决方案 10:

Git 似乎正在检查两个文件夹:文件夹和包含该文件夹的文件夹。两者都必须由当前用户拥有。如果需要,.git包含该文件夹的文件夹的其他文件夹和文件可以由其他用户拥有。因此.git

  1. 检查当前用户,例如运行whoami

  2. 检查文件夹的所有者.git,例如运行ls -al .git

  3. 评估更改文件夹所有权(.git如果不是当前用户)的影响。如果您还想更改组,您可能需要检查用户所在的组,例如正在运行id -Gn usernamegroups username

  4. sudo chown current_user:appropriate_group .git如果使用适当的current_userand运行是安全的,请更新 Git 存储库的所有者appropriate_group,例如运行sudo chown ubuntu:ubuntu .git

  5. 检查包含该文件夹的文件夹的所有者.git,例如运行ls -al ./

  6. 评估更改该文件夹所有权(如果不是当前用户)的影响。如果您还想更改组,您可能需要检查用户所在的组,例如正在运行id -Gn usernamegroups username

  7. sudo chown current_user:appropriate_group ./通过运行适当的命令来更新该文件夹的所有权current_userappropriate_group例如运行sudo chown ubuntu:ubuntu ./

确保如果您确实更改了包含文件夹的文件夹的所有者,.git权限设置仍按您的喜好进行,即前任所有者是否保留与当前组和所有人相同的读取、写入和执行权限。如果他们丢失了权限,请考虑调整组或其他,或者恢复文件夹所有权更改并改用git config --global --add safe.directory path/to/repository解决方案。

解决方案 11:

应该可以恢复所有权。例如:

sudo chown -v "$( id -u; ):$( id -g; )" .;
sudo chown -v "$( id -u; ):$( id -g; )" -R .git;
find '.git' -type d -exec chmod -v 775 {} ;;
find '.git/objects' -type f -exec chmod -v 444 {} ;;
find '.git/hooks' -mindepth 1 -maxdepth 1 -type f -exec chmod -v 775 {} ;;
find '.git' -type f ! -path '.git/objects/*' ! -path '.git/hooks/*' -exec chmod -v 664 {} ;;

相关:ensure_valid_ownership()

解决方案 12:

当错误“致命:检测到存储库中的可疑所有权”不是由您直接执行的命令返回,而是由其他程序(即 PHP )执行的exec()safe使用添加目录--global将不起作用,因为范围--global是当前用户。

在这种情况下,您需要使用范围而不是safe来将 repo 目录分配为在系统范围范围内。--system`--global`

IE:git config --system --add safe.directory /Path/To/Your/Repository

sudo由于将要修改文件,因此您需要权限才能运行此命令/etc/gitconfig

解决方案 13:

这里的所有答案都不适合我;我跑了:

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

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

但我在 IntelliJ 中仍然遇到错误,因为我使用的是git pull管理员用户。对我而言唯一有效的解决方案是直接转到用户页面路径:

C:UsersYour Username\\.gitconfig (add your username here)

并编辑gitconfig文件。我添加了:

 [safe]
    directory = *

这对我很有用。

解决方案 14:

对于在Phabricator中遇到此问题的人来说,这是对我有用的解决方案。

背景:在发生这种情况之前,Phabricator 对我来说运行良好。当我打开任何存储库以获取克隆 URL 时,它会抛出此错误:

致命:在“/var/repo/3”存储库中检测到可疑所有权

解决方案:我检查了目录/var/repo的权限和所有权,该目录是我当前的用户。Phabricator Web 服务器使用用户“www-data”执行命令。然后,我将“/var/repo”目录的所有权更改为以下内容:

sudo chown www-data:ubuntu -R repo/

之后一切运行正常。

解决方案 15:

升级 JetBrains 的Rider代码编辑器后,我遇到了这种情况。升级之前,Rider 是通过快捷方式以管理员身份启动的。升级删除了快捷方式的“以管理员身份运行”配置,这导致 Rider 的终端开始出现此 Git 错误。再次以管理员身份运行应用程序 (Rider) 解决了 Git 问题。

解决方案 16:

在您的项目位置打开Git Bash并运行以下命令(适用于 Windows 操作系统)以绕过安全性。

git config --global safe.directory '*'

解决方案 17:

如果您使用给定用户克隆存储库,然后尝试使用其他用户提取更改,则会出现错误。将用户更改为您克隆存储库的用户,如下所示:

su <user>

然后继续,例如,

git pull

解决方案 18:

如果您在 Windows 上使用Sublime Merge,并且只想消除此警告,则需要编辑Sublime Merge 使用的 gitconfig 文件,该文件通常位于Git \etc子目录中的安装目录中(类似于C:\Program Files\Sublime Merge\Git\etc\gitconfig)。 您可以在那里添加[safe]部分(如果尚不存在)和建议的路径或通配符 '*',如其他答案所建议的那样。

请参阅以下示例:

[safe]
    directory = *

或者

[safe]
    directory = 'C:/Users/Username/Projects/Whatever'

当然你可以添加多个目录。

解决方案 19:

对Stiin的回答有一些补充:

该命令git config --global --add safe.directory '*'将添加所有存储库safe.directory但仅适用于当前用户

如果您想对所有用户执行相同的操作:git config --system --add safe.directory '*'就可以了。

在 Windows 上改用"*",正如这个问题下许多人提到的那样。

当然,这可以在没有通配符的情况下通过指定 repo 目录来工作git config --system --add safe.directory /media/data/users/jhu3szh/serialize

解决方案 20:

我在使用供应商文件夹中的库时遇到了问题。我刚刚删除了库的文件夹并重新安装了它。

解决方案 21:

我遇到了fatal: detected dubious ownership in repository at在 Windows 上使用 Fork 客户端对WSL中的存储库进行操作的问题。解决方案是在 Fork 内部打开一个 Git 控制台(指向 Fork 使用的 Git Windows 客户端)并执行:

git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu-22.04/home/username/code/my-repo-name'

在 WSL 内部运行命令根本不起作用,因为它.gitconfig在 WSL 内部发生了变化。

解决方案 22:

当您尝试 Git 初始化(然后运行任何其他 Git 命令)不是 子文件夹时,会引发此错误/home/my_user/

就您而言,该文件夹是serialize,位于 下/media/...

您只需移动文件夹即可停止发出警报/home/my_user/

否则,您也可以更改的所有者my_project_folder,正如@Prakash Sahoo 建议的那样。

解决方案 23:

如果您迷路了,可以使用不同的用户名克隆文件。例如,尝试使用sudo git clone。这会将所有权授予root

如果您选择git clone...那么所有权就归当前username...其中一个应该可以工作,很可能您将它们混淆了,您需要输入sudo git branch -a以避免此错误。

解决方案 24:

在 Windows 10 上,我只需创建存储库的副本并使用它即可解决同样的问题。

在Git Bash中(从存储库外的工作目录):

cp -r <path-to-repository> <temporary-path>
rm -rf <path-to-repository>
mv <temporary-path> <path-to-repository>

解决方案 25:

这就是我解决问题的方法:

在你的 Android Studio 终端中运行以下命令:

git config --list --global

看到列出的重复目录后,我决定通过运行以下命令来编辑全局文件:

git config --global --edit

我的问题是列出的.gitconfig全局文件中有重复的配置。所以我只是简单地删除了所有配置,直到[safe] directory = *剩下为止。

此配置将所有目录标记为安全,前提是您没有在 USB 驱动器上安装 Git,而是在本地硬盘上安装。

如果您在安装期间将Notepad++设置为默认 Git 编辑器,则只需保存刚刚编辑的 Notepad++ 文件即可。否则,如果编辑仍停留在控制台中,则只需键入:wq以保存并在编辑后关闭文件。

最后一步是重新启动您的 IDE(本例中为 Android Studio)。使用此视频作为 Git 配置教程的指南。Git 配置文件在哪里?

解决方案 26:

如果您有sudo访问权限,则可以使用所有权:

sudo -u OWNER git COMMAND

例如:

sudo -u jenkins git status

sudo -u adam git clone ...

...

解决方案 27:

重新安装 GIT 并再次为 GIT 设置电子邮件配置
我没有添加安全目录配置。使用来自您有权访问子模块的同一域的电子邮件。

解决方案 28:

我遇到了同样的问题,尝试了上面的大部分方法,但都没有用。然后查看了“.gitconfig”文件,该文件通常位于C:Usersyour_username

首先是这样的:

[safe]
directory = C:/Users/your_username/source/repos/somefolder
directory = C:/Usersyour_usernamesourcerepossomefolder2

当我注意到路径中缺少“/”时,我更改了它并保存添加它:

[safe]
    directory = C:/Users/djayasek/source/repos/telenet
    directory = C:/Users/djayasek/source/repos/MobiSIM_2024_03_01

很奇怪,但确实有效

解决方案 29:

如果您运行的命令已经失败过一次,或者安装文件夹中有该软件包的先前版本,请尝试在重试之前删除相应软件包的文件夹,或者寻找进一步的解决方案。例如,jhu3szh/serialize如果它与您的软件包名称相对应。

解决方案 30:

在 Ubuntu 中,我运行了以下命令,然后我的问题就解决了:

git config --global --add safe.directory /opt/lampp/htdocs/MyPROJECT
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用