Yunfi

Yunfi

tg_channel
github
email

Windows 下 git 仓库 dubious ownership 所有权問題

fatal: 'path/to/your/repo' において、疑わしい所有権が検出されました。

もし Windows でユーザーを切り替えたり、システムを再インストールしたりした場合、D ドライブ上の git リポジトリを再度開くと、または U ドライブやデュアルブートの他のシステムパーティションの Git リポジトリを開くと、このような「疑わしい所有権」のエラーに遭遇することがあります。Git は、safe.directory にパスを追加する解決策を提供していますが、この Git リポジトリの所有権を直接変更する方法はありますか?

この記事では、私が記一个围棋程序的制作过程で言及したリポジトリを例に、この Git リポジトリの所有権の問題を解決する方法を記録します。

問題の概要#

現時点では、この問題は Windows でのみ発生し、比較的新しい Git バージョンが必要です。

トリガーは非常に簡単で、2 つのケースがあります:

  1. Git コマンドを実行するユーザーと、フォルダを作成したユーザーが異なる場合。

  2. Git リポジトリが Windows で管理されていないファイルシステムにある場合、つまり Windows バージョンの Git で U ドライブ、wsl、またはデュアルブートの他のシステムドライブ上の Git リポジトリにアクセスする場合。(ほとんどの場合、これは 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 のフォルダから始める必要があります。

解決策#

  1. Git リポジトリのフォルダのプロパティを開き、「セキュリティ」タブをクリックし、「詳細」をクリックします。

    安全属性
  2. ポップアップウィンドウで、上部に「所有者」という項目があり、その後ろに「変更」というボタンがあります。それをクリックします。

  3. 入力欄に自分のユーザー名(User フォルダの名前)を入力し、名前の確認をクリックします。自動的に マシン名/ユーザー名 の形式で補完されます。例えば、私の場合は CHRIS_ROG_M16\chris です。そして、OK をクリックします。

  4. 前の画面に戻り、「コンテナとオブジェクトの所有者を置き換える」のチェックボックスをオンにし、OK をクリックします。

すべて完了したら、所有者は現在のユーザーに変更されるはずです(現在のユーザーが Microsoft アカウントにログインしている場合、名前とメールアドレスが表示されます)。

所有者設定

参考資料#

permissions - How to change ownership of a local GIT repository on Windows 11 - Stack Overflow

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。