はじめに
git.exe pull --progress -v --no-rebase "origin"
fatal: unsafe repository ('//192.168.56.xxx/Develop$/repo1' is owned by someone else)
To add an exception for this directory, call:
git config --global --add safe.directory '%(prefix)///192.168.56.xxx/Develop$/repo1'
git did not exit cleanly (exit code 128) (109 ms @ 2022/04/22 12:44:50)
ある日、TortoiseGitでpullしたら上記のようなエラーが出た。どうやら Git for Windows ver2.35.2 から変更されたらしい。
環境
今回の問題解決にはあまり関係ないが紹介しておく。ちょっと特殊。
リモートにあるKVMのゲストOS(Ubuntu)にソースや実行環境(Docker)があり、それをローカルのWindows11からRemote Viewer(Spice)でつなげて、Ubuntu上の Visual Studio Code でソースの編集を行う。
Ubuntu と Windows は Sambaでもつなげていて、ちょっとややこしいGitの操作はWindows上のTortoise Git で行う。
解決方法
上記のエラーメッセージにも書いてあるが、設定ファイルに safe.directory を追加するコマンドを実行すれば完了。ただし注意点があるので記載する。
Windows上で行う
リモートのLinuxではなく、ローカルのWindowsでコマンドを実行する必要がある。
シングルクォーテーションはNG
試したところシングルクォーテーションでは有効にならなかった。ダブルクォーテーションかクォーテーションなしでコマンドを実行する。%(prefix)の部分は何かに置き換えろ、というわけではないので、そのまま打ち込んでOK。
C:\> git config --global --add safe.directory %(prefix)///192.168.56.xxx/Develop$/repo1
または
C:\> git config --global --add safe.directory "%(prefix)///192.168.56.xxx/Develop$/repo1"
リポジトリが複数ある場合
リポジトリが複数入っている上位ディレクトリを指定することはできない。リポジトリ毎に設定を行わないといけない。
globalな設定ファイルに追記しなくてはならない
コマンドを実行する場合は --globalオプションを必ずつけなければならない。
エディタで設定ファイルに書き込む場合は、C:\Users\ユーザー名\.gitconfig に追記する。各リポジトリの設定ファイル(リポジトリ/.git/config)に追記しても効果はない。
記述例
設定ファイルはこんな感じになっている。
[safe]
directory = %(prefix)///192.168.56.xxx/Develop$/repo1
directory = "%(prefix)///192.168.56.xxx/Develop$/repo2"