fatal: detected dubious ownership in repository at 'path/to/your/repo'
如果你在 Windows 上切換過用戶或者重裝過系統,那麼再重新打開 D 盤上的 git 倉庫;或者打開 U 盤或者雙系統中其他系統分區的 Git 倉庫時,可能遇到過這樣的 dubious ownership
報錯。雖然 Git 給出了將路徑添加到 safe.directory
的解決方法,但是有沒有方法直接修改這個 Git 倉庫的所有權呢?
本文以我在 記一個圍棋程序的製作過程 一文中提到的倉庫為例,記錄如何解決這個 Git 倉庫所有權問題。
問題簡述#
目前來看,這個問題只會在 Windows 下觸發,同時還需要比較新的 Git 版本。
觸發方法很簡單,有兩種情況:
-
運行 Git 命令的用戶和當時創建文件夾的用戶不相同。
-
Git 倉庫位於非 Windows 管理的文件系統上,比如用 Windows 版本的 Git 訪問 U 盤上、wsl 裡或者雙啟動的其他系統驅動器上的 Git 倉庫時。(大多數情況下就是指 repo 位於非 NTFS 的驅動器上)
兩者滿足其一時,就會觸發 類似如下的錯誤信息:
fatal: detected dubious ownership in repository at 'D:/Projects/StupidGo'
'D:/Projects/StupidGo' is owned by:
'S-1-5-21-0000000000-0000000000-25500068-1001'
but the current user is:
'S-1-5-21-0000000000-0000000000-1346710304-1001'
To add an exception for this directory, call:
git config --global --add safe.directory D:/Projects/StupidGo
錯誤信息給出了一種解決方法,即將該目錄添加進 Git 的 safe.directory
屬性中,如果這麼做了,就可以在 ~/.gitconfig
文件中找到這樣兩行:
[safe]
directory = D:/Projects/StupidGo
如果你是由於第二個原因觸發的報錯,那麼這就是最好的方案了,但是你還可以往下看一看我為什麼這麼說;
如果是由於第一個原因的話,這樣並沒有從根源上解決問題:Git 報錯的原因是該文件夾不是當前用戶創建的,但是實際上這個 Git 倉庫就是我的,只不過我換了個馬甲而已。從根源上來說,解決方法應該是更改這個 repo 的所有者。
但是,Git 並並不會在 .git 文件夾中存儲所有者相關的信息,Windows 版的 Git 又是如何捕捉到這個安全問題的呢?
實際上,Git 查看了 Windows 的文件夾所有者信息,如果和目前用戶不符,就會開始抱怨。而在不由 Windows 管理的文件系統中,並沒有 “文件夾所有者” 這一屬性,所以也會報錯。
由此可見,這個問題的解決不是從 Git 入手,而是從 Windows 的文件夾入手。
解決方法#
-
打開 Git 倉庫文件夾的屬性,點擊 “安全” 選項卡,再點擊 “高級”。
-
在彈出的窗口中,靠上的部分有一欄,叫 “所有者”,在它的後面有一個 “更改” 按鈕,點擊它。
-
在輸入框內填入自己的用戶名(User 文件夾的名字),然後點擊檢查名稱,會自動補全為
機器名稱/用戶名
的形式,比如我的是CHRIS_ROG_M16\chris
,然後點確定。 -
回到上一界面,將新出現的 “替換自容器和對象的所有者” 單選框勾上,再點確認,即可。
在全部完成後,所有者應該變為了目前用戶(如果目前用戶登錄了微軟賬號,則會顯示微軟賬號的姓名和郵箱)
參考資料#
permissions - How to change ownership of a local GIT repository on Windows 11 - Stack Overflow