Перейти к основному содержимому

Исправляем ошибку git dubious ownership detected после переустановки Windows

·265 слов·2 минут

Если вы здесь, значит, вы столкнулись с ошибкой git “Fatal: detected dubious ownership in repository at …”.

Вероятно, вы недавно переустановили систему, подключили внешний носитель с репозиторием к другому компьютеру, или произошло что-то ещё, о чём я могу только догадываться.

TLDR

Убедившись, что репозиторий действительно ваш, и вам нужно работать именно с ним, выполняем две команды в PowerShell от имени администратора:

takeown /F D:\projects\repo /R /D Y

icacls D:\projects\repo /grant "$($env:USERDOMAIN)\$($env:USERNAME):(OI)(CI)F" /T

Где D:\projects\repo - путь к репозиторию. Также, можно выполнить оптом на всю папку с репозиториями, если их много.

Чуть подробнее

Мы привыкли к тому, что в Unix-подобных системах у каждого файла и директории есть владелец и права. Это те самые rwxr-xr-x или их числовые представления, а также владелец-пользователь и владелец-группа.

В Windows оно тоже присутствует, только выглядит чуть сложнее, непонятнее, да и нам реже приходится возиться с этим на винде, если мы конечно эту винду не администрируем в тех же задачах, что и наши серверы на Linux.

Так вот, переустанавливая систему, мы конечно может и создаём пользователя с тем же именем, но его внутренний идентификатор в системе уже совершенно отличается от того, что был на старой установке. А git отказывается работать с репозиториями, владельцем которых мы не являемся с точки зрения OS.

Команды выше как раз и присваивают рекурсивно все права и владение на папку и её содержимое текущему пользователю, под которым мы вошли в систему.

Вместо заключения

Подробного разбора механизмов ACL в Windows не будет, так как сам я очень слабо представляю, как там всё устроено. Мог бы конечно и с ИИ написать, но зачем? Это же мой сайт с моими мыслями.

Кирилл Белоусов
Автор
Кирилл Белоусов
Также известен как cyrmax. Пишу код, тестирую, автоматизирую инфраструктуру и помогаю делать цифровые продукты доступнее.