MorFans Dev
折腾 - 开发 - 分享

Git 提示 fatal: unsafe repository is owned by someone else 错误

Git 提示 fatal: unsafe repository is owned by someone else 错误

最近在使用 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 程序

解决方案也很简单,因为这个报错是因为当前目录所有者不是当前操作系统的用户。

下面介绍两种方法解决这个问题:

  1. 修改文件所有者
  2. 添加安全目录

修改文件所有者

Windows 修改所有者方法

如果习惯使用命令行,可以使用 takeown.exe 快速设定所有者为当前用户:

takeown.exe /F .\nonportable /R

命令行批量处理:

Get-ChildItem -Directory | % {takeown.exe /F $_ /R }

或者使用图形界面修改:

找到 git repo 的文件夹,右键点击属性:

3967533be19f476f98ee2daa3bcf6240
右键进入git repo 的文件夹属性

找到 安全,点击高级设置:

dae9ee6aa2434f24bca2b0c9ff527712
进入权限设置

在弹出的窗口点击更改,输入自己电脑的用户名:

f5c49d88abbe4883a4d01d15c4940586
修改当前所有者用户
9e1514d625354a8480b32507626db4b3
按照图示操作然后应用设置

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 $_}

虽然但是 👀,还是推荐修改文件夹权限,而不是添加 安全文件夹

赞赏
魔帆博客,版权所有 | 如未注明,均为原创
本站均采用 BY-NC-ND 协议 (署名-非商业性使用-禁止演绎) 进行授权。
转载请注明来自本站文章:Git 提示 fatal: unsafe repository is owned by someone else 错误(https://www.morfans.cn/archives/3350)
# # # # #
首页      记录点滴      Git 提示 fatal: unsafe repository is owned by someone else 错误

野小新

文章作者

野小新很野~

发表回复

textsms
account_circle
email

  • mmm

    我在mac上使用了unix系的修改所有者方法github actions 依然会报错啊

    2年前 回复
    • 野小新

      @mmm: Hi mmm, 可能你在 github actions 中 chown 了错误的用户和组。在 GitHub Actions 中我觉得最好使用添加安全文件夹那个方法(直接全局就好了)。

      在你用到git操作步骤的前面添加一个步骤,比如
      - name: 解决权限问题
      run: git config --global --add safe.directory 你git文件夹路径

      还有注意所有操作都是要在工作流(*.yml) 上添加命令而不是本地执行命令,GitHub Actions 和你操作的电脑系统一般是没有关联的噢~

      2年前 回复
      • mmm

        @野小新: 感谢您的耐心解答. 我按照你说的使用 「 run: git config –global –add safe.directory /usr/bin/git」还是不行啊. git文件夹路径是我在本机上执行 「which git」拿到的, 请问是我的git文件夹路径不对吗? 从哪来获取这个路径呢?

        2年前 回复
        • mmm

          @mmm: 我在项目中的.git 文件中的config找到的路径替换上去也不对啊大佬, 请问这个路径是怎么找到的啊

          2年前 回复
          • 野小新

            @mmm: 应该 git 报错时候后面会有这个路径,你项目文件夹位置。比如类似这样的路径 /home/runner/work/Cluttered-bucket/Cluttered-bucket
            你可以试试添加下边的这个命令
            git config --global --add safe.directory "$GITHUB_WORKSPACE"
            上边命令是直接把 Git Actions 默认工作目录添加进安全目录了。理论上应该能解决你的问题。

            2年前
        • 野小新

          @mmm: 不对,添加安全文件命令后边跟着的路径不是 git 命令二进制文件路径噢。
          是你项目文件夹。你不知道文件夹在哪的话,可以尝试在 action 调用 git 命令那块地方加个 pwd 或什么的输出一下当前路径。

          2年前 回复

Git 提示 fatal: unsafe repository is owned by someone else 错误
最近在使用 Git 和 GitHub Actions 时,应该不少人都遇到了这个问题: fatal: unsafe repository ('D:/Paxos/scoop/buckets/MorFans' is owned by someone else) To add an exception …
扫描二维码继续阅读
2022-04-26