Yunfi

Yunfi

tg_channel
github
email

在 Windows 下的 git 仓库中,存在可疑的所有权问题。

fatal: 在 'path/to/your/repo' 倉庫中檢測到可疑的所有權

如果你在 Windows 上切換過使用者或者重新安裝過系統,那麼再重新打開 D 盤上的 git 倉庫;或者打開 U 盤或者雙系統中其他系統分區的 Git 倉庫時,可能遇到過這樣的 dubious ownership 錯誤。雖然 Git 給出了將路徑添加到 safe.directory 的解決方法,但是有沒有方法直接修改這個 Git 倉庫的所有權呢?

本文以我在 記一個圍棋程式的製作過程 一文中提到的倉庫為例,記錄如何解決這個 Git 倉庫所有權問題。

問題簡述#

目前看來,這個問題只會在 Windows 下觸發,同時還需要比較新的 Git 版本。

觸發方法很簡單,有兩種情況:

  1. 執行 Git 命令的使用者和當時建立資料夾的使用者不同時。

  2. Git 倉庫位於非 Windows 管理的檔案系統上,比如用 Windows 版本的 Git 存取 U 盤上、wsl 裡或者雙開的其他系統驅動器上的 Git 倉庫時。(大多數情況下就是指 repo 位於非 NTFS 的驅動器上)

兩者滿足其一時,就會觸發類似如下的錯誤訊息:

fatal: 'D:/Projects/StupidGo' 倉庫中檢測到可疑的所有權
'D:/Projects/StupidGo' 的所有者是:
        'S-1-5-21-0000000000-0000000000-25500068-1001'
但目前使用者是:
        'S-1-5-21-0000000000-0000000000-1346710304-1001'
要將此目錄添加到例外目錄中,請執行以下命令:

        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 的資料夾入手。

解決方法#

  1. 打開 Git 倉庫資料夾的屬性,點擊「安全」選項卡,再點擊「高級」。

    安全屬性
  2. 在彈出的視窗中,靠上的部分有一欄,叫「所有者」,在它的後面有一個「更改」按鈕,點擊它。

  3. 在輸入框內填入自己的使用者名稱(User 資料夾的名字),然後點擊檢查名稱,會自動補全為 機器名稱/使用者名稱的形式,比如我的是 CHRIS_ROG_M16\chris,然後點確定。

  4. 回到上一界面,將新出現的「替換自容器和物件的所有者」單選框勾上,再點確認,即可。

在全部完成後,所有者應該變為了目前使用者(如果目前使用者登入了微軟帳號,則會顯示微軟帳號的姓名和郵箱)

所有者設定

參考資料#

permissions - How to change ownership of a local GIT repository on Windows 11 - Stack Overflow

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。