VSCodeのDevContainer上のgitのエラーfatal: detected dubious ownership in repository at..について

vscodeのDev container上のgitにて、fatal: detected dubious ownership in repository at...といったエラーが出た。

エラー

gitのcommitなどの操作はvscodeとは別のターミナルから行なっていた。commitが終わってもvscodeでの状態が更新されないので、手動で更新をかけたところ、このようなエラーが出ていた:

> git status -z -uall
fatal: detected dubious ownership in repository at '/workspaces/someapp'
To add an exception for this directory, call:

    git config --global --add safe.directory /workspaces/someapp

Dev container上で書いているので、パスはこのような感じになっている。

エラーの文面を見る限り、アクセス権限関連の問題のようだ。関連する問題として、以下を見つけた:

git submodule update failed with 'fatal: detected dubious ownership in repository at'
Imountedanewhddinmylinuxworkstation.Itlooksworkingwell.Iwanttodownloadsomerepointhenewdisk.SoIexecutegitcloneXXX,anditworkswell.ButwhenIcdinthefolder,andexe...

git configのドキュメントも見てみた:

Git - git-config Documentation

所有権が異なる.gitを読み取ろうとすると発生するエラーのようだ。

git version 2.38.1で起こったが、もう少し前の2.35.2で追加されたセキュリティ機能のようだ。詳しいことはここに書いてある:

setup_git_directory(): add an owner check for the top-level directory · git/git@8959555
Itposesasecurityrisktosearchforagitdirectoryoutsideofthedirectoriesownedbythecurrentuser.Forexample,itiscommone.g.incomputerpoolsofeducationalinstitutestohavea&...

上位ディレクトリの所有権が異なる.gitが作成されることによって、下位のgitレポジトリの操作時に意図しないコマンドの実行が引き起こされてしまうのを防ぐための機能とのこと。

エラーメッセージは上記のgitのバージョンアップのcommitでは違うメッセージになっているようだ。

書かれた通りに解決

Dev Containerでの利用はユーザがデフォルトではvscodeに指定されているので、ホスト側のユーザと異なるというのは十分起こり、この状態でホスト側からcommitなどすると起こる問題なんだと思った。なのでエラーのインストラクションの通りにgitのグローバル設定にてsafe.directoryを指定すればOK。

ホスト側ではgitのアップデートもしたが、今のところこのエラーは起きていない。もしホスト側で起きても、同様の設定をホスト側のgitのグローバル設定をすればいいだろう。safe.directoryは複数の値を設定できるとドキュメントにあるので複数で起こっても大丈夫なはず。

悪意のあるユーザが上位のフォルダで.gitを作成できる可能性があるのであればsafe.directoryは使わないでおいたほうがよさそうだ。

以上です。

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