fatal: パス /to/your/repo のリポジトリで疑わしい所有権が検出されました
もし Windows でユーザーを切り替えたり、システムを再インストールしたりした場合、D ドライブ上の git リポジトリを再度開くか、U ドライブやデュアルブートの他のシステムパーティションの Git リポジトリを開くと、このような「疑わしい所有権」のエラーに遭遇することがあります。Git は、パスをsafe.directory
に追加する解決策を提供していますが、この Git リポジトリの所有権を直接変更する方法はありますか?
この記事では、私が「記一个围棋程序的制作过程」で言及したリポジトリを例に、この Git リポジトリの所有権の問題を解決する方法を記録します。
問題の概要#
現時点では、この問題は Windows でのみ発生し、比較的新しいバージョンの Git が必要です。
トリガー方法は非常に簡単で、2 つのケースがあります:
-
Git コマンドを実行するユーザーとフォルダを作成したユーザーが異なる場合。
-
Git リポジトリが Windows が管理していないファイルシステムにある場合、つまり Windows バージョンの Git で U ドライブ、wsl、またはデュアルブートの他のシステムドライブにアクセスする場合です。(ほとんどの場合、これは NTFS 以外のドライブを指します)
これらのいずれかが満たされると、次のようなエラーメッセージが表示されます:
fatal: detected dubious ownership in repository at 'D:/Projects/StupidGo'
'D:/Projects/StupidGo' is owned by:
'S-1-5-21-0000000000-0000000000-25500068-1001'
but the current user is:
'S-1-5-21-0000000000-0000000000-1346710304-1001'
To add an exception for this directory, call:
git config --global --add safe.directory D:/Projects/StupidGo
エラーメッセージには、ディレクトリを Git のsafe.directory
プロパティに追加する方法が示されています。これを行うと、~/.gitconfig
ファイルに次のような 2 行が表示されます:
[safe]
directory = D:/Projects/StupidGo
もし 2 番目の理由でエラーが発生した場合、これが最善の解決策ですが、なぜそう言っているのかは後で説明します。もし最初の理由でエラーが発生した場合、これは問題を根本的に解決していません:Git のエラーの原因は、そのフォルダが現在のユーザーによって作成されていないためですが、実際にはこの Git リポジトリは私のものであり、ただ別のユーザー名を使用しているだけです。根本的な解決策としては、このリポジトリの所有者を変更する必要があります。
しかし、Git は.git フォルダに所有者に関連する情報を保存しませんし、Windows バージョンの Git はこのセキュリティの問題をどのように検出しているのでしょうか?
実際には、Git は Windows のフォルダの所有者情報を確認し、現在のユーザーと一致しない場合にエラーを報告します。一方、Windows が管理していないファイルシステムでは、「フォルダの所有者」という属性は存在しないため、エラーが発生します。
したがって、この問題の解決策は Git からではなく、Windows のフォルダから始める必要があります。
解決策#
-
Git リポジトリのフォルダのプロパティを開き、「セキュリティ」タブをクリックし、「詳細」をクリックします。
-
ポップアップウィンドウで、上部に「所有者」という項目があり、その後ろに「変更」というボタンがあります。それをクリックします。
-
入力欄に自分のユーザー名(User フォルダの名前)を入力し、名前の確認をクリックします。自動的に
マシン名/ユーザー名
の形式で補完されます。例えば、私の場合はCHRIS_ROG_M16\chris
です。そして、OK をクリックします。 -
前の画面に戻り、「コンテナとオブジェクトの所有者を置き換える」のチェックボックスをオンにし、OK をクリックします。
すべて完了したら、所有者は現在のユーザーに変更されるはずです(現在のユーザーが Microsoft アカウントにログインしている場合、名前とメールアドレスが表示されます)
参考資料#
permissions - How to change ownership of a local GIT repository on Windows 11 - Stack Overflow