CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-05-30中級

git の detected dubious ownership が出てコマンドが止まるときの原因と対処

Claude Code やコンテナ・CI でgitを動かすと突然出る「detected dubious ownership in repository」の原因を整理し、safe.directory設定から所有権の根本対処までを実例で解説します。

Claude Code197git16safe.directoryコンテナ2トラブルシューティング37

普段は問題なく動いていた自動処理が、ある朝だけ次のメッセージで止まっていました。

fatal: detected dubious ownership in repository at '/tmp/repos/my-app'
To add an exception for this directory, call:

	git config --global --add safe.directory /tmp/repos/my-app

2014年から個人開発を続けるなかで、いまは4つのサイトを Claude Code のスケジュール実行で毎日更新しているのですが、サンドボックス側のユーザーが切り替わったタイミングで、既存のクローンに対する git pull がこの一行で全部こけました。エラー文の親切さに反して、初見だと「なぜ昨日まで動いていたものが急に?」と戸惑うところです。原因と対処を、実際にぶつかった順に整理します。

なぜ「dubious ownership」が出るのか

このエラーは git のバグでも、リポジトリの破損でもありません。リポジトリのディレクトリ所有者と、いま git を実行しているユーザーが一致しないときに、git が安全のためにわざと処理を止めているだけです。

背景には CVE-2022-24765 という脆弱性への対応があります。共有マシンや一時ディレクトリ(/tmp など)に他人が置いた .git/config を、自分の権限で git が読み込んでしまうと、core.fsmonitor のような設定経由で任意コマンドを実行されかねません。そこで Git 2.35.2 以降は、所有者が違うリポジトリに触れた瞬間に止まる挙動になりました。

私の環境で起きたのは、まさにこのパターンです。所有権を確認すると一目瞭然でした。

$ ls -ld /tmp/repos/my-app /tmp/repos/my-app/.git
drwxr-xr-x 7 nobody nogroup 4096 /tmp/repos/my-app
drwxr-xr-x 8 nobody nogroup 4096 /tmp/repos/my-app/.git
 
$ id -un
runner

ディレクトリは nobody 所有なのに、いま動いているのは runner ユーザー。前回の実行と今回の実行でサンドボックスのUIDが変わると、コンテナや一時環境では普通に起こります。

いちばん速い対処:safe.directory に登録する

そのリポジトリを信頼してよいと自分が判断できるなら、エラーメッセージが提示するとおり、例外として登録するのが最短です。

git config --global --add safe.directory /tmp/repos/my-app

これで該当ディレクトリだけが許可リストに入り、以降の git pullgit status が通ります。設定は実行ユーザーのグローバル ~/.gitconfig[safe] セクションとして追記されるので、中身を確認したいときは次のとおりです。

$ git config --global --get-all safe.directory
/tmp/repos/my-app

ポイントは --add を付けること。--add なしで git config --global safe.directory ... を繰り返すと、複数リポジトリを扱うときに前の値を上書きしてしまいます。私は自動化スクリプトの冒頭で、扱うリポジトリのパスをそのまま --add で登録するようにしてから、この手のつまずきがなくなりました。

ワイルドカード指定は便利だが範囲に注意

毎回パスを足すのが面倒な場合、ワイルドカードですべてのリポジトリを信頼する書き方もあります。

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

CI のように「このコンテナの中身は自分の管理下で、毎回作り直される使い捨て環境」だと割り切れるなら、これは実用的です。私自身、使い捨てのビルドコンテナでは * を使っています。

ただし共有開発マシンや、他人のリポジトリが混ざりうる環境では * を避けてください。所有者チェックという防御を丸ごと外すことになり、CVE-2022-24765 が想定したリスクがそのまま戻ってきます。使い捨てかどうかを基準に選ぶのがちょうどよい線引きだと考えています。

「dubious ownership」と「Permission denied」は別物

ここが、私が同じ朝に踏んだ一番の落とし穴でした。safe.directory を登録したのに、今度は次のエラーに変わったのです。

error: cannot open .git/FETCH_HEAD: Permission denied

これを見て「safe.directory の設定が効いていない」と勘違いしがちですが、別の問題です。整理すると次のようになります。

  • detected dubious ownership … 所有者が違うので git が自主的に止めている。設定(safe.directory)で解除できる
  • Permission denied(FETCH_HEAD などの書き込み時)… OSのファイルパーミッション上、本当に書き込めない。設定では解決しない

nobody 所有のディレクトリに runner ユーザーが git pull で書き込もうとすれば、safe.directory をいくら足してもOSが弾きます。ls -l で実際の権限を見て、書き込みビットが自分にあるかを確認するのが確実です。

$ touch /tmp/repos/my-app/.git/_wtest && echo OK || echo "NOT WRITABLE"
NOT WRITABLE

書き込めないと分かったら、設定をいじるフェーズではありません。所有権そのものを直すか、書ける場所に移すフェーズです。

環境に応じた根本対処

所有権の不一致を恒久的に解消するには、状況に合わせて次のどれかを選びます。

所有権を取り戻せる権限があるなら、chown で実行ユーザーに揃えるのが王道です。

sudo chown -R "$(id -un):$(id -gn)" /tmp/repos/my-app

sudo が使えない、あるいは所有者を変えてはいけない共有環境なら、自分が確実に書ける場所に作り直すのが堅実です。私のスケジュール実行では、/tmp 配下が別ユーザー所有で書けなくなるケースが定期的に起きたため、書き込み可能な $HOME 配下へフォールバックする形に切り替えました。

WORK="$HOME/repos/my-app"
if [ -d "$WORK/.git" ] && [ -w "$WORK/.git" ]; then
  cd "$WORK" && git pull --rebase origin main
else
  rm -rf "$WORK"
  git clone --depth 1 "$REPO_URL" "$WORK"
fi

クローン自体を、最終的に git を動かすユーザーと同じユーザーで行うのも効果的です。Docker でビルド中に root でクローンし、実行時に非rootユーザーに切り替える構成だと、まさに所有権の食い違いが生まれます。USER を切り替えたにクロードする、もしくは chown を一手間挟むだけで未然に防げます。

同じ朝を二度繰り返さないために

このエラーは、根本的には「誰がそのファイルを所有しているか」という一点に集約されます。自動化の冒頭で所有権と書き込み可否を先に確認しておくと、止まってから原因を探すより圧倒的に速いです。私は次の3行をスクリプトの先頭に置くようにしました。

git config --global --add safe.directory "$WORK"
[ -w "$WORK/.git" ] || WORK="$HOME/repos/$(basename "$WORK")"
echo "owner=$(stat -c '%U' "$WORK" 2>/dev/null) me=$(id -un)"

まず safe.directory を登録して所有者チェックを通し、書けなければ書ける場所へ逃がし、最後に所有者と自分を並べて記録しておく。たったこれだけで、翌朝ログを開いたときに何が起きたかが一目で分かります。

毎日動かす仕組みほど、こういう静かな前提のズレが効いてきます。同じところでつまずいている方の助けになれば幸いです。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-05-27
Claude Code Bash ツールで /tmp が Permission denied になる時の対処 — $HOME/repos フォールバックパターン
Claude Code のサンドボックス Bash で git clone が `Permission denied` で止まる症状の原因と、$HOME/repos へ自動退避させる実装パターンを、4サイト並行運用での実体験とともに整理します。
Claude Code2026-07-01
Claude Code をアップデートしたら hook が発火しなくなった — ハイフン入り matcher の厳密一致化(v2.1.195)
Claude Code v2.1.195 でハイフンを含む hook matcher が部分一致から厳密一致に変わり、既存の PreToolUse フックが静かに発火しなくなりました。原因の切り分けと、壊れない matcher の書き方をまとめます。
Claude Code2026-06-24
修正済みのファイルを、もう一度直そうとしました — 浅い永続クローンの陳腐化と「読む前に取り直す」判断
無人で動くエージェントが、すでに直したファイルをもう一度直そうとした原因は、数日前の浅いクローンを読み続けていたことでした。陳腐化を数値で検知し、判断の前にだけ取り直す設計を整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →