Git で「fatal: detected dubious ownership in repository」エラーを解消する方法

最近の Git バージョンでは、セキュリティ強化の一環として「リポジトリの所有者が異なる場合」に警告やエラーが出るようになりました。
特に macOS や WSL(Windows Subsystem for Linux)で、ファイル共有フォルダやマウントディレクトリを扱う際に次のようなメッセージが表示されることがあります。

fatal: detected dubious ownership in repository at '/path/to/repo'

この記事では、このエラーの原因と、safe.directory 設定による正しい対処法を解説します。

エラーの意味

Git 2.35.2 以降では、リポジトリの所有者(ファイルのオーナー)と Git を実行しているユーザーが一致しない場合 に、安全性を確保するため処理をブロックします。
これは、他人の所有するリポジトリに悪意のあるフックスクリプトが仕込まれている可能性を防ぐための保護機能です。

代表的なエラーメッセージは以下の通りです。

fatal: detected dubious ownership in repository at '/mnt/c/Users/...'
To add an exception, call:
  git config --global --add safe.directory /mnt/c/Users/...

つまり「このディレクトリはあなたの所有物ではないため、安全ではない」と Git が判断しています。

主な発生環境と原因

1. WSL で Windows 側のディレクトリを操作している場合

WSL では /mnt/c/ 以下など、Windows 側のファイルシステムをマウントして使うことができます。
しかし、この領域では「ファイル所有者が Linux の現在のユーザーと一致しない」ことが多いため、Git が安全ではないと判断します。

2. macOS / Linux で sudo 経由や別ユーザーで操作している場合

たとえば sudo git status のように管理者権限で Git を実行した場合、ファイル所有者が異なるため同様のエラーが出ることがあります。

3. CI/CD や Docker コンテナでホストマウントをしている場合

ホスト OS のユーザー ID とコンテナ内のユーザー ID が異なる場合にも、同様にこの警告が出ることがあります。

解決方法

対応策1: safe.directory に対象リポジトリを登録する

もっとも一般的な解決策は、Git の設定で「このディレクトリは安全である」と明示的に登録する方法です。

git config --global --add safe.directory /path/to/repo

これにより、Git はそのディレクトリを信頼できるものとして扱い、警告が出なくなります。

もしリポジトリのパスを確認したい場合は、次のコマンドで現在地を確認します。

pwd

それを safe.directory に登録すればOKです。

対応策2: すべてのリポジトリを信頼する(開発用限定)

もしローカル開発専用環境であれば、全てのリポジトリを安全とみなす設定も可能です。

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

ただし、これはセキュリティリスクがあるため、チーム開発や本番サーバーでは推奨されません

対応策3: 所有者を正しく合わせる

根本的な解決として、リポジトリの所有者を現在のユーザーに合わせる方法もあります。

sudo chown -R $(whoami) /path/to/repo

macOS や Linux で所有権が混在している場合、これでエラーが解消します。

対応策4: sudo を使わない

sudo git ... のように権限昇格をしている場合は、なるべく通常ユーザーで実行してください。
Git の設定ファイル(~/.gitconfig)やキャッシュディレクトリの所有者が混在すると、別のトラブルにつながることがあります。

対応策5: WSL の Git 設定で安全ディレクトリを追加する

WSL で Windows 側のプロジェクトを扱う場合、最初に以下の設定をしておくとスムーズです。

git config --global --add safe.directory /mnt/c/Users/<YourUsername>/projects

WSL での開発環境を複数利用する場合は、これを共通設定としておくと便利です。

まとめ

fatal: detected dubious ownership in repository は、Git の安全機構が「リポジトリの所有権が一致しない」ことを検知してブロックしているだけです。
ファイルシステムの整合性やユーザーの実行権限が明確であれば、エラー自体は簡単に解消できます。

主な対策は以下の3つ:

  • 特定のディレクトリを安全とみなす git config --global --add safe.directory /path/to/repo
  • 全リポジトリを信頼(開発環境限定) git config --global --add safe.directory '*'
  • 所有権を修正して統一 sudo chown -R $(whoami) /path/to/repo

もし CI や Docker 環境で同様のエラーが出る場合は、ビルドユーザーとマウントパスの UID/GID を合わせることで解消できます。

参考

タイトルとURLをコピーしました