如何在Git safe.directory中递归地添加目录?

33
根据这个问答,由于在git上发现了最新的CVE安全漏洞,我们可以使用safe.directory参数将目录添加到白名单中。但似乎没有办法递归地添加特定目录。
我有非常的存储库需要添加,因此如果存在该功能,我想要使用递归添加。这些仓库大多放置在我的Ubuntu上挂载的NTFS磁盘上,因此内部文件的所有者始终为root。看来最新的更新限制了git操作,如果登录用户与git目录的所有者不匹配,则会显示如下错误:fatal: unsafe repository ('/media/data1/project1/si/project' is owned by someone else
2个回答

54
从Git 2.36开始,您还可以将 * 添加到 safe.directory,表示“所有”。它不是递归的,但根据您的情况可能会有所帮助。
git config --global --add safe.directory "*"

请查看https://github.blog/2022-04-18-highlights-from-git-2-36/并搜索safe.directory。

编辑:根据zcoop98的建议,我们应该在'*'周围添加双引号。


3
我遇到了这个错误:参数数量错误,应该是2个 - Kunal Tyagi
你在语句末尾有一个星号(*),对吧?那算作第二个参数。 - Swissmant
14
根据您使用的命令行界面不同,您可能需要将 * 放在单引号'*'或双引号"*"中。 - zcoop98
我无法在cygwin中使用,''或"*"使其工作。但在普通的Windows命令提示符中可以正常工作。 - Bill Tarbell
这对我来说很有效,可以让WSL2(Windows子系统Linux)共享功能在我使用WSL Linux控制台或Windows操作系统时都能正常工作。 - Don
显示剩余3条评论

11
我现在做的事情可能不是最完美的解决方案,但是我通过使用 find 命令查找所有的 .git 文件夹,并将它们添加进去。
find /full/path -name '.git' -type d -exec bash -c 'git config --global --add safe.directory ${0%/.git}' {} \;

提醒大家:在使用查找命令时,需要添加完整路径,这样才能解析出完整路径。


2
如果你有太多的子目录(就像我一样),值得添加“-maxdepth”选项以加快执行速度。 - dcg
子模块的 .git 是一个文本文件,所以“-type d”可能不是必需的。 - ciel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接