Всякий раз, когда я пытаюсь зафиксировать конкретное Git-репо, я получаю сообщение об ошибке "Недостаточно разрешения для добавления объекта в базу данных репозитория .git / objects." Изначально это кажется тем же вопросомэто уже задавали и отвечали бесчисленное количество раз (то есть здесь , здесь , здесь и т. д.).Тем не менее, решение, которое всегда дается - что кажется довольно очевидным из самого сообщения об ошибке - заключается в том, что это одно из прав доступа к файлу и / или владения.Тем не менее, даже когда я рекурсивно устанавливаю владельца для всего дерева каталогов и рекурсивно устанавливаю разрешения для наиболее «разрешающего» 777 ... Я все еще не могу устранить ошибку.
Более подробно: Gitкоммиты фактически выполняются службой, работающей в контейнере Docker.Репозиторий находится в файловой системе на хост-машине, которая отображается в контейнере.Я знаю, что uid / gid, используемый контейнером при вызове Git, равен 2999, поэтому для более легкой проверки / отладки проблемы с хост-машины я могу использовать docker exec
.Во-первых, просто чтобы подтвердить, как использовать docker exec
для запуска команд от имени определенного пользователя:
docker exec -u 2999:2999 containerName sh -c "id"
... Да, как и ожидалось, это печатает uid = 2999 и gid = 2999.
Итак, сначала я установлю рекурсивные права доступа и владельца для всех решений, приведенных в другом месте, для этой ошибки:
docker exec containerName sh -c "chmod 777 /path/to/repo -R"
docker exec containerName sh -c "chown 2999:2999 /path/to/repo -R"
Затем я могу подтвердить, что они были установлены правильно:
docker exec containerName sh -c "ls -la /path/to/repo"
Теперь давайте попробуем выполнить несколько команд git:
docker exec -u 2999:2999 containerName sh -c "cd /path/to/repo && git add -A"
docker exec -u 2999:2999 containerName sh -c "cd /path/to/repo && git commit -m 'testcomit'"
Результат:
error: insufficient permission for adding an object to repository database .git/objects
error: testfile: failed to insert into database
error: unable to index file testfile
fatal: adding files failed
На данный момент я в полной растерянности.Если я явно установил владельца / разрешения и явно выполняю коммит от имени того же пользователя ... почему эта ошибка все еще возникает?Обратите внимание, что я определенно могу написать в репозиторий как пользователь 2999, так что, похоже, только Git не работает.Например, это работает, и файл выглядит так, как ожидалось:
docker exec -u 2999:2999 containerName sh -c "echo sometext > /path/to/repo/testfile"