fatal: detected dubious ownership in repository at '...' は、「git を実行しているユーザー」と「リポジトリのフォルダーの所有者」が違うときに、git が処理を止めたエラーです。 他人のリポジトリの設定(.git/config)やフックを読むと、そのリポジトリを作った人が仕込んだコマンドが、自分の権限で動いてしまうおそれがあるためです。

状況 おすすめの直し方
自分のリポジトリなのに所有者がずれている(sudo で作った・コピーで所有者が変わった) 所有者を自分に直す(sudo chown -R $USER: リポジトリ)
共有のフォルダー・Docker のマウント・CI で、所有者が違うのが前提 safe.directory にそのリポジトリだけを登録
コンテナや CI の使い捨ての環境で、どこでも許可したい safe.directory '*'(その環境だけ)

確認環境:Ubuntu 24.04、git 2.43.0(確認日 2026年10月10日)。一般ユーザー(dev)が作ったリポジトリを root で操作する、root が作ったリポジトリを dev で操作する、の両方で再現しました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「detected dubious ownershipの直し方|git」

再現:所有者が違うと、status も log も動かない

$ ls -ld /srv/gitdemo
drwxr-xr-x 4 dev dev 4096 Oct 10 23:25 /srv/gitdemo      ← 所有者は dev

# root で実行
$ git status
fatal: detected dubious ownership in repository at '/srv/gitdemo'
To add an exception for this directory, call:

    git config --global --add safe.directory /srv/gitdemo

git log・git pull、このリポジトリを元にした git clone も、同じエラーで止まりました。逆に、root が作ったリポジトリを dev で操作しても同じエラーになりました。

直し方1:所有者を直す(自分のリポジトリなら、こちら)

sudo git clone で作った、root で解凍・コピーした、などで所有者がずれただけなら、所有者を直すのが本来の直し方です。

sudo chown -R "$USER": /srv/gitdemo

確認環境でも、所有者を実行ユーザーに合わせると、safe.directory の設定なしで On branch master と動きました。

直し方2:safe.directory に登録する

エラーメッセージに出ているコマンドをそのまま実行します。

git config --global --add safe.directory /srv/gitdemo

--global(自分のユーザーの設定)に書きます。 書き方によって、効くものと効かないものがありました。

書き方 結果(git 2.43)
safe.directory /srv/gitdemo 効く
safe.directory /srv/gitdemo/(末尾にスラッシュ) 効かない
safe.directory /srv(親のフォルダー) 効かない(下のリポジトリには及ばない)
safe.directory '/srv/*' 効かない(git 2.43 では)。最新の公式ドキュメントでは、末尾に /* を付けると配下のすべてのリポジトリを許可すると説明されている
safe.directory '*' 効く(所有者の確認をすべて止める)
* のあとに空の値(safe.directory '') 効かなくなる(空の値は、それまでの一覧を消す)

エラーメッセージに表示されたパスを、そのまま書くのが確実です。/* の書き方を使うなら、git --version で版を確認し、実際に効くか試します。

リポジトリの .git/config に書いても効かない

safe.directory は、システム(--system)・ユーザー(--global)・コマンドライン(-c や環境変数)の設定でだけ有効です。リポジトリの中の設定(--local)は、そもそも「信用できるか分からないリポジトリの設定」なので使われません。確認環境でも、.git/config に [safe] directory = /srv/gitdemo を直接書き足しても、エラーのままでした(git config --local は、リポジトリとして開けないためエラーで実行できません)。

設定の場所 結果
git config --global --add safe.directory ... 効く
git config --system --add safe.directory ...(全ユーザー) 効く
git -c safe.directory=/srv/gitdemo status(その1回だけ) 効く
環境変数 GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory GIT_CONFIG_VALUE_0=/srv/gitdemo 効く
.git/config(--local) 使われない

safe.directory '*' を使ってよい場面

'*' は、所有者の確認そのものを止める設定です。他のユーザーが書き込めるフォルダーにあるリポジトリでも、設定やフックを読むようになります。

環境 '*' を使うか
自分のパソコン・共有のサーバー 使わない。リポジトリごとに登録する
使い捨てのコンテナ・CI のジョブ その環境の中だけなら選択肢になる

sudo・Docker・CI でよくあるパターン

sudo で git を実行したとき

git は、sudo で root として動いているとき、SUDO_UID(sudo を実行した元のユーザー)が所有するリポジトリも信用します(公式ドキュメント)。確認環境でも、dev のリポジトリに対して、SUDO_UID を dev にした root の git は On branch master と動きました。sudo -i などで環境変数が消えると、このしくみは働きません。

そもそも、自分のリポジトリで sudo git を使う必要は、ほぼありません。sudo git pull を続けると、作られたファイルの所有者が root になり、次に自分で操作したときにこのエラーや Permission denied が出ます。所有者を直して、sudo なしで実行します。

Docker のコンテナからマウントしたリポジトリ

ホストのユーザー(UID 1000 など)が作ったリポジトリを、コンテナの中の root から操作すると、確認環境の「dev のリポジトリを root で操作」と同じ状態になります。

方法 書き方の例
コンテナを同じ UID で動かす docker run --user "$(id -u):$(id -g)" ...
イメージの中で登録する RUN git config --global --add safe.directory /workspace
実行のたびに渡す git -c safe.directory=/workspace ...

CI(GitHub Actions のコンテナなど)

チェックアウトしたユーザーと、ジョブのステップを実行するユーザーが違うと起きます。ジョブの中で、作業フォルダーだけを登録します。

git config --global --add safe.directory "$GITHUB_WORKSPACE"

確認の手順(チェックリスト)

順番 確認すること 方法
1 実行しているユーザー whoami(sudo を付けていないか)
2 リポジトリの所有者 ls -ld リポジトリ
3 自分のリポジトリか 自分のものなら chown で所有者を直す
4 登録したパスが、エラーのパスと同じか 末尾のスラッシュ・親のフォルダーは効かない
5 書いた場所 --global・--system・-c。.git/config は使われない
6 一覧を消していないか git config --global --get-all safe.directory に空の行がないか

よくある質問

Q. Windows でも出ますか。 A. 出ます。同じしくみです。エラーメッセージに出た git config --global --add safe.directory ... のパスを、表示どおりに登録します。

Q. 登録した safe.directory を確認・削除するには。 A. 確認は git config --global --get-all safe.directory、削除は git config --global --unset safe.directory /srv/gitdemo(すべて消すなら --unset-all)です。

Q. git をバージョンアップしたら急に出るようになりました。 A. この確認は、セキュリティの修正として git に加わったものです。以前の版では出なかった環境でも、更新後に出るようになります。上の手順で、所有者を直すか登録します。

まとめ

  • 実行ユーザーとリポジトリの所有者が違うと出る。他人の設定やフックを実行しないための確認
  • 自分のリポジトリなら chown で所有者を直すのが本来の直し方
  • 所有者が違うのが前提なら、エラーに出たパスをそのまま --global の safe.directory に登録
  • 末尾のスラッシュ・親のフォルダー・.git/config は効かない。空の値は一覧を消す
  • '*' は確認を全部止める。使い捨てのコンテナや CI の中だけにする
  • sudo git は使わない。所有者が root のファイルが増えて、同じ問題が起きる

参考・出典

確認日はいずれも 2026年10月10日です。

  • Git ドキュメント「git-config」(SCOPES・Protected configuration):https://git-scm.com/docs/git-config
  • Git のソース「Documentation/config/safe.adoc」:https://github.com/git/git/blob/master/Documentation/config/safe.adoc

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「detected dubious ownershipの直し方|git」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?