“git submodule update” 失败,出现“严重:在存储库中检测到可疑所有权...”
- 2024-10-18 09:00:00
- admin 原创
- 75
问题描述:
我在我的 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
检查当前用户,例如运行
whoami
检查文件夹的所有者
.git
,例如运行ls -al .git
评估更改文件夹所有权(
.git
如果不是当前用户)的影响。如果您还想更改组,您可能需要检查用户所在的组,例如正在运行id -Gn username
或groups username
sudo chown current_user:appropriate_group .git
如果使用适当的current_user
and运行是安全的,请更新 Git 存储库的所有者appropriate_group
,例如运行sudo chown ubuntu:ubuntu .git
检查包含该文件夹的文件夹的所有者
.git
,例如运行ls -al ./
评估更改该文件夹所有权(如果不是当前用户)的影响。如果您还想更改组,您可能需要检查用户所在的组,例如正在运行
id -Gn username
或groups username
sudo chown current_user:appropriate_group ./
通过运行适当的命令来更新该文件夹的所有权current_user
,appropriate_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
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件