はじめに
今回はGitを操作した場合に、「fatal: detected dubious ownership in repository」が発生する場合を調査しました。
【紹介】個人開発
Mac向けの、定型文の挿入も可能なクリップボード履歴管理アプリです。
Windows版は以前からありましたが、基本的な使い方はMac版も同じですので、もしよかったらダウンロードしてみてください。
環境
今回はWSL環境を使用して、動作確認します。
以下の記事を参考にしてください。
また、Gitクライアントは、Git for Windowsを使用します。
以下の記事を参考にしてください。
エラーについて
「CVE-2022-24765」の脆弱性に対する対応です。
例えば共有ディレクトリにリポジトリがある場合、さらに上位のディレクトリに「.git」ディレクトリを作成し、不正に設定を読み込ませることができるといったものです。
そのため、共有フォルダにあるリポジトリを操作する場合など、一部の条件ではGit操作時に以下のエラーが発生し、対応が必要です。
fatal: detected dubious ownership in repository
例えば困るケースとして、WSL上の仮想ディレクトリにリポジトリを作成する場合です。
動作確認
例えば、WSL上の仮想ディレクトリをリポジトリとする場合、以下のようなパスになります。
ローカルPCのLinux環境ではありますが、共有フォルダとしてアクセスすることができます。
\\wsl$\Ubuntu\home\ユーザ名\git-repos\
上記のディレクトリ上にフォルダを作り、Gitコミットをしてみましょう。
ちなみに作業はPowerShellから行います。(WindowsのGitクライアントを使用)
> cd \\wsl$\Ubuntu\home\ユーザ名\git-repos\
> mkdir test-repo
> cd .\test-repo\
> git init
> git commit
コミットのコマンドの時点で、以下のエラーが表示されました。
fatal: detected dubious ownership in repository at '//wsl$/Ubuntu/home/xxx/git-repos/test-repo'
To add an exception for this directory, call:
git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu/home/xxx/git-repos/test-repo'
例えばDドライブに同じ手順を行うと、同様のエラーは表示されません。
ローカルのドライブは問題ないようです。
D:\test-repos
対応
基本的には、複数人がアクセスするような共有フォルダでは、リポジトリを作成しないのが良いでしょう。
ただ、ローカルのWSL上であれば問題ないと思いますので、セーフディレクトリとして追加します。
gitコミット時に表示された、以下のコマンドを実行しましょう。
git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu/home/xxx/git-repos/test-repo'
git のグローバルconfigに追加されました。
[safe]
directory = %(prefix)///wsl$/Ubuntu/home/xxx/git-repos/test-repo
この状態で、gitコミットコマンドを行うと、先ほどのエラーは表示されなくなり、操作を行うことができます。
WSLのGitを使う場合
WSLの場合はWSL側にもGitクライアントがあるため、そちらを使う方法もあります。
Gitクライアントのバージョンを上げてみました。(WSLでコマンド実行)
$ git --version
git version 2.38.0
WSLを起動し、WSLのGitコマンドを使用すれば、以下のようなディレクトリで操作できますので問題ないです。
$ pwd
/home/ユーザ名
試しに同様の手順で操作しましたが、今回のエラーは発生しませんでした。
VS Codeで試す
リポジトリの初期化
VS CodeでWSL上のディレクトリに対し、Windows上のGitを使用した場合、うまく動作しない現象が発生しました。
試しにWSL上にディレクトリを作成し、VS Codeを起動してみます。
WSLでコマンドを実行します。
$ cd
$ mkdir test-repo-code
$ cd test-repo-code\
$ code .
VS Codeが起動しました。
「はい、作成者を信頼します」をクリックします。
ソース管理を開き、「リポジトリを初期化する」をクリックします。
リポジトリの初期化はできているようですが、VS Code上は上記の表示から変わりません。
VS CodeでGitのログを確認します。
コマンドパレットで、「Git: Show Git Output」を実行します。
Git for Windowsが使用されているのが分かります。
git initコマンドで終わっており、VS Code上は上手く動作していません。
(正常時は、以降もログが表示されます)
[2022-10-10T12:48:52.189Z] ログ レベル: Info
[2022-10-10T12:48:52.193Z] [info] Git の検証が検出されました: C:\Program Files\Git\cmd\git.exe
[2022-10-10T12:48:52.230Z] [info] C:\Program Files\Git\cmd\git.exe から Git 2.38.0.windows.1 を使用しています
[2022-10-10T12:48:52.280Z] > git rev-parse --show-toplevel [42ms]
[2022-10-10T12:48:52.280Z] fatal: not a git repository (or any of the parent directories): .git
[2022-10-10T12:48:56.047Z] > git init [126ms]
GitHubに公開
今後は、「GitHubに公開」を試してみます。
GitHub上では空のリポジトリだけが作成され、ファイルがコミット・プッシュされませんでした。
VS CodeでGitのログを確認します。
コマンドパレットで、「Git: Show Git Output」を実行します。
以下のエラーが発生していました。
[2022-10-09T15:23:01.203Z] > git init [347ms]
[2022-10-09T15:23:01.312Z] > git rev-parse --show-toplevel [103ms]
[2022-10-09T15:23:01.312Z] fatal: detected dubious ownership in repository at '//wsl$/Ubuntu/home/xxx/test-repo-code'
To add an exception for this directory, call:
git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu/home/xxx/test-repo-code'
対応
VS Codeで対応
最新のVS Codeでは、「安全ではないリポジトリの管理」という機能が追加されています。
上記のボタンをクリックすると、以下のように表示されますので選択します。
ファイルをコミットできるようになりました。
実際はユーザのGitの設定ファイルが更新されます。
C:¥Users¥[ユーザー名]¥.gitconfig
ファイルの中身は以下のようになっていました。
[safe]
directory = %(prefix)///wsl.localhost/Ubuntu/home/XXX/Laravel-Project/laravel-10-20230402
コマンドで対応
PowerShellでエラーログに出力されていたコマンドを実行し、プロジェクトフォルダをセーフディレクトリに追加します。
git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu/home/xxx/test-repo-code'
この手順後、GitHubへ公開できることが確認できました。
または、VS CodeでWSL上のGitを使う方法もあります。
この場合、WSL上のリポジトリをリモートで開くことができますので、セーフディレクトリに追加する必要はありません。
さいごに
今回はGitを操作した場合に、「fatal: detected dubious ownership in repository」が発生する場合を調査しました。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
コメント