最近在使用 Git 和 GitHub Actions 时,应该不少人都遇到了这个问题:
fatal: unsafe repository ('D:/Paxos/scoop/buckets/MorFans' is owned by someone else)
To add an exception for this directory, call:
git config --global --add safe.directory D:/Paxos/scoop/buckets/MorFans
解决
这个问题可能和 Git安全漏洞公布| GitHub 博客 有关,应该只发生于最近更新的 git 程序
解决方案也很简单,因为这个报错是因为当前目录所有者不是当前操作系统的用户。
下面介绍两种方法解决这个问题:
- 修改文件所有者
- 添加安全目录
修改文件所有者
Windows 修改所有者方法
如果习惯使用命令行,可以使用 takeown.exe
快速设定所有者为当前用户:
takeown.exe /F .\nonportable /R
命令行批量处理:
Get-ChildItem -Directory | % {takeown.exe /F $_ /R }
或者使用图形界面修改:
找到 git repo 的文件夹,右键点击属性:
找到 安全,点击高级设置:
在弹出的窗口点击更改,输入自己电脑的用户名:
Linux 等Unix系系统修改所有者方法
# paxos:morfans => 用户名:组
sudo chown -R paxos:morfans gitRepo文件夹路径
还可以通过指定 git 的用户身份运行
假设 morfans 是存储库所有者
sudo -u morfans -- git status
添加 git 安全目录
第二个方法就是 git 命令报错时候提示的方法。
如果你是在 GitHub Actions 中遇到这个问题,可能添加 safe.directory 是更方便的选择。
让 git 信任这个目录(如果您知道目录内容是安全的)
git config --global --add safe.directory <Git Repo文件夹路径>
或者手动调整 git 配置文件 C:\Users\<username>\.gitconfig
[safe]
directory = gitRepo文件夹路径
repo太多了,批量来
Linux 下可以使用 find 命令来批量执行:
如果子目录太多了,可以使用 -maxdepth 参数
find 完整路径 -name '.git' -type d -exec bash -c 'git config --global --add safe.directory ${0%/.git}' {} \;
Windows 下可以使用 powershell 批量执行:
(ls D:\PowerShell\ParentFolder\ -Directory).FullName -replace '\\','/' | %{git config --global --add safe.directory $_}
虽然但是 👀,还是推荐修改文件夹权限,而不是添加 安全文件夹
发表回复