広告

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

ツール

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

広告

はじめに

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

使用するバージョンなど
  • Windows 11
  • WSL2
広告

【紹介】個人開発

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

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

環境

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

WSL2のインストールを分かりやすく解説【Windows10/11】
Widows上でLinuxが使えるWSL2をインストールしてみました。WindowsでLinuxコマンドが使えますし、開発環境としても便利に使えます。

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

【GitHub】プロジェクトリポジトリにプッシュ
今回は、GitHubリポジトリへプッシュする手順をまとめました。

エラーについて

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上のリポジトリをリモートで開くことができますので、セーフディレクトリに追加する必要はありません。

VS CodeでWSL上のGitを使う方法
VS CodeでWSL上のGitを使う方法をまとめました。

さいごに

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

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

OSWindowsツールツール他
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

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