search
LoginSignup
6

posted at

updated at

TortoiseGitで「fatal: unsafe repository」なエラー

git.exe checkout master --
fatal: unsafe repository ('//wsl.localhost/Ubuntu/home/user1/my-project' is owned by someone else)
To add an exception for this directory, call:

git config --global --add safe.directory '%(prefix)///wsl.localhost/Ubuntu/home/user1/my-project'

gitは正常に終了しませんでした (終了コード 128) (281 ms @ 2022/04/20 22:30:48)

Gitを最新版にアップデートしたところ、TortoiseGitでコミットやブランチ切り替えをしようとするとexit status 128エラーが表示されて処理を停止するようになりました。

解決方法

https://qiita.com/LemonmanNo39/items/e92ed9e3b9c812238006
まず前提として、上記の記事に書いてあるように、wsl側のホームディレクトリ内にプロジェクトを配置しているということ。ホスト側のエディタで編集するためにDockerのマウント対象にしているような使い方です。wsl本来の使い方に沿っているので、それ自体は問題ないです。でもこの使い方をしている人が今回のエラーに悩まされます。

TottoiseGitとwslを使っているということは、WindowsとwslそれぞれにGitがインストールされているということになります。TortoiseGitはWindows側のGit(git.exe)を使います。Windows側のGitでwsl側のGitリポジトリを操作しようとする。最新のGitでは、こういうことをするとエラーになります。

エラーメッセージに表示されているとおり、

git config --global --add safe.directory '%(prefix)///wsl.localhost/Ubuntu/home/user1/my-project'

上記をコピペで実行すれば解決です。ただしwsl側で実行するとwsl側の.gitconfigを更新してしまうため解決しません。 Windows側で実行する必要があります。普通にPowerShellを開けば「Windows側」です。

これにより.gitconfigファイルに設定が追加されます。気になる人は開いて確認してみてください。

なんでこんなエラーが出るようになったのかというと、セキュリティ上の理由だそうです。

https://gigazine.net/news/20220414-git-security-vulnerability/
(2022-04-22追記)Gigazineに記事が出てた。Windowsとかに限った話ではなく、管理をしっかりやってる環境は影響を受けそうです。でも理屈を理解すると納得という感じです。エラーメッセージに書いてあるとおりにするだけで解決するので、メッセージが英語でも慌てずに読むこと。

SourceTreeの場合は?

たぶんSourceTreeでも最新版をインストールした場合は同様の状態になると思います。SourceTreeのオプション設定を見たところ、SourceTreeをアップデートしても内蔵のGitはアップデートされないので、2020年4月以前からSourceTreeを使っている場合は影響を受けません。

Visual Studio Codeの場合 (2022-04-22追記)

そういえばwsl領域内でvscodeのGit関連の機能が動作しなくなってたのを思い出した。さっき見たら解決してました。今回の設定変更のおかげだと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6