自分だけのクイズを作成しよう - Quipha
スポンサーリンク

Gitで「fatal: detected dubious ownership in repository」が出力されコミットできない場合

ツール

当サイトではアフィリエイト広告を利用しています。

スポンサーリンク

はじめに

今回はGitを操作した場合に、「fatal: detected dubious ownership in repository」が発生する場合を調査しました。

使用するバージョンなど
  • Windows 11
  • WSL2
スポンサーリンク

【紹介】個人開発

Mac向けの、定型文の挿入も可能なクリップボード履歴管理アプリです。
Windows版は以前からありましたが、基本的な使い方はMac版も同じですので、もしよかったらダウンロードしてみてください。

  • Xcode
  • Swift 5
  • SwiftUI
  • Realm Database
  • Appleによる公証済み

環境

今回はWSL環境を使用して、動作確認します。
以下の記事を参考にしてください。

また、Gitクライアントは、Git for Windowsを使用します。
以下の記事を参考にしてください。

エラーについて

CVE-2022-24765」の脆弱性に対する対応です。

Git security vulnerability announced
Upgrade your local installation of Git, especially if you are using Git for Windows, or you use Git on a multi-user mach...

例えば共有ディレクトリにリポジトリがある場合、さらに上位のディレクトリに「.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]

Git for Windowsの場合は、「Git 2.38.0.windows.1 を使用しています」のように表示されます。

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」が発生する場合を調査しました。

他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。

\オススメ/
OSWindowsツールツール他
スポンサーリンク
この記事を共有
千草をフォローする
管理人

現役のITエンジニア。
気ままにコードや技術情報をまとめています。
Webアプリ/Windows・Macアプリ/モバイルアプリ/機械学習やIoT他。
(Java, PHP, Javascript, Swift, Python, C#, 他)
個人開発:Clibor, Quipha, TXT-Crypter
Kindle本: Laravel9 実践入門, 他

千草をフォローする

個人開発

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
Mac版も公開しています。

自分だけの問題集や問題を作成し、クイズを行い学習に活用しましょう。

Mac版Cliborです。
基本的な使い方は、Windows版と同じです。

麻雀の符計算をマスターしよう。

簡単にテキストを暗号・復号でき、秘密情報を守ります。

便利なツールを公開しています。
是非、活用してください!

コメント