Когда я пытаюсь перейти на общий удаленный git, я получаю следующую ошибку:
insufficient permission for adding an object to repository database
Затем я прочитал об исправлении здесь: Fix Это сработало для следующего нажатия, поскольку все файлы были из правильной группы, но в следующий раз, когда кто-то нажал на изменение, он сделал новый элемент в папке объектов, в которой была группа по умолчанию. как группа. Единственное, о чем я могу думать, это изменить все группы разработчиков по умолчанию для элементов, которые они регистрируют, но это похоже на хак. Любые идеи? Спасибо.
git add
иgit commit
-ing от имени пользователя root. Я исправил это с помощьюgit reset
ответа на этот вопрос, чтобы исправить.git
права доступа к каталогу.Ответы:
Разрешения на ремонт
После того, как вы определили и устранили основную причину (см. Ниже), вы захотите восстановить разрешения:
Обратите внимание, что если вы хотите, чтобы все могли изменять хранилище, вам не нужно указывать
chgrp
chmod наsudo chmod -R a+rwX .
Если вы не исправите основную причину, ошибка будет возвращаться, и вам придется снова и снова запускать вышеуказанные команды.
Основные причины
Ошибка может быть вызвана одним из следующих:
Репозиторий не настроен для использования в качестве общего репозитория (см.
core.sharedRepository
Вgit help config
). Если вывод:это не
group
илиtrue
или1
или какая-то маска, попробуйте запустить:и затем повторно запустите рекурсив
chmod
иchgrp
(см. «Разрешения на ремонт» выше).Операционная система не интерпретирует бит setgid для каталогов, поскольку «все новые файлы и подкаталоги должны наследовать владельца группы».
Если
core.sharedRepository
естьtrue
илиgroup
, Git использует функцию операционных систем GNU (например, каждый дистрибутив Linux), чтобы гарантировать, что вновь созданные подкаталоги принадлежат правильной группе (группе, в которой находятся все пользователи репозитория). Эта функция описана в документации GNU coreutils :Однако не все операционные системы имеют эту функцию (NetBSD является одним из примеров). Для этих операционных систем вы должны убедиться, что все ваши пользователи Git имеют одинаковую группу по умолчанию. Кроме того, вы можете сделать хранилище доступным для записи во всем мире, запустив
git config core.sharedRepository world
(но будьте осторожны - это менее безопасно).источник
false
илиumask
). Смотритеgit help config
для более подробной информации.git push
с использованием учетной записи root в моем рабочем каталоге. Я обнаружил, что владельцем некоторых файлов репозитория git является root (-r--r--r--. 1 root root 6380 5月 25 12:39 9b44bd22f81b9a8d0a244fd16f7787a1b1d424
) согласно этому ответу.X
буква, а не строчнаяx
. Прописная букваX
означает «установить,S_IXGRP
если файл является каталогом (или если установлен любой другойS_IX*
бит)», поэтому он не сделает все файлы исполняемыми. Это может быть ненужным, но, возможно, нет, еслиcore.sharedRepository
было установлено0600
в какой-то момент в прошлом.Для Ubuntu (или любого Linux)
Из корня проекта,
Вы можете узнать, какими должны быть ваше имя и ваша группа, посмотрев разрешения большинства выходных данных этой команды ls -al
Примечание: помните звезду в конце строки sudo
источник
Sorry, user myuser is not allowed to execute '/bin/chown
*
Вся разница. Спасибо.ls .git
используйте следующую команду, работает как магия
введите команду в точности так, как она есть (с лишними пробелами и одной точкой в конце)
источник
sudo chmod -R ug+w .;
По сути,
.git/objects
файл не имеет разрешения на запись. Приведенная выше строка дает разрешение на все файлы и папки в каталоге.источник
Я просто хотел добавить свое решение. У меня было репозиторий на OS X, который владел root-ом в некоторых каталогах, а Home (который является моим пользовательским каталогом) в других, что вызвало ту же ошибку, перечисленную выше.
К счастью, решение было простым. С терминала:
источник
Хороший способ отладки это в следующий раз, когда это произойдет, SSH в удаленном репо, перейдите в папку объектов и выполните
ls -al
.Если вы видите 2-3 файла с другим пользователем: принадлежность к группе, чем это проблема.
В прошлом это случалось со мной, когда некоторые устаревшие скрипты обращались к нашему git-репо и обычно означали, что другие (unix) файлы были добавлены / изменены пользователем в последнюю очередь, и у вашего пользователя нет прав на перезапись этих файлов. Вы должны создать общую группу GIT , что все пользователи GIT-включен в , а затем рекурсивно папку и её содержимое , так что это группа собственности является общей группой.
chgrp
objects
git
Вы также должны добавить залипание к папке, чтобы все файлы, созданные в папке, всегда имели группу
git
.Обновление: я не знал о core.sharedRepository. Полезно знать, хотя это, вероятно, просто делает выше.
источник
Решено для меня ... только это:
источник
Chmod 777
не рекомендуется, так как все ваши файлы открыты для остального мира, что делает вашу машину уязвимойchmod 777
, в 99 случаях из 100 вы не понимаете проблему, и вы, вероятно, вызовете больше проблем, чем решите. Как показывает принятый ответ выше, этот вопрос не отличается.Это может легко произойти, если вы запустили
git init
пользователя, отличного от того, которого вы планируете использовать при внесении изменений.Если вы будете слепо следовать инструкциям [1], это произойдет, поскольку вы, вероятно, создали пользователя git как root, а затем сразу же перешли к git init без смены пользователя между ними.
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
источник
Linux, macOS:
где
name
ваше имя пользователя иgroup
группа, к которой принадлежит ваше имя пользователя.источник
После того, как вы добавите некоторые вещи ... зафиксируйте их и после того, как закончите, нажмите на них BANG !! Начните все проблемы ... Как вы должны заметить, существуют некоторые различия в способах определения как новых, так и существующих проектов. Если какой-то другой человек попытается добавить / зафиксировать / отправить те же файлы или содержимое (git сохранит оба одинаковых объекта), мы столкнемся со следующей ошибкой:
Чтобы решить эту проблему, вы должны иметь в виду систему разрешений операционной системы, поскольку в этом случае вы ограничены ею. Чтобы лучше понять проблему, проверьте папку вашего git-объекта (.git / objects). Вы, вероятно, увидите что-то подобное:
* Обратите внимание, что права доступа к этим файлам были предоставлены только вашим пользователям, никто никогда не сможет их изменить ... *
РЕШЕНИЕ ПРОБЛЕМЫ
Если у вас есть разрешение суперпользователя, вы можете перейти вперед и изменить все разрешения самостоятельно, выполнив второй шаг. В любом другом случае вам нужно будет спросить всех пользователей, объекты которых созданы с их пользователями, используйте следующую команду, чтобы узнать, кто они :
Теперь вам и всем владельцам файлов нужно будет изменить права доступа к этим файлам, выполнив:
После этого вам нужно будет добавить новое свойство, которое эквивалентно --shared = group для нового репозитория, в соответствии с документацией, это сделает репозиторий доступным для записи в группу, выполнив его:
https://coderwall.com/p/8b3ksg
источник
username:groupname
для моего, но когда я попыталсяchmod -R 774 .
, я мог тогда бежатьgit add --all
успешно.Для моего случая ни одно из предложений не сработало. Я на Windows, и это сработало для меня:
git remote add foo //SERVERNAME/path/to/copied/git
)git push foo master
, Это сработало? Большой! Теперь удалите неработающий репозиторий и переименуйте его во все, что было раньше. Убедитесь, что разрешения и общие свойства остаются прежними.источник
Я ударил эту же проблему. Читая здесь, я понял, что это были разрешения на файлы, на которые ссылалось сообщение. Исправление для меня было в:
/etc/inetd.d/git-gpv
Он запускал git-daemon, поскольку пользователь « nobody » не имел разрешения на запись.
(Я сомневаюсь, что другие называют их conf-файлом inetd git-gpv. Обычно это будет прямо в /etc/inetd.conf)
источник
Вам нужны достаточные права на запись в каталог, в который вы отправляете.
В моем случае: сервер Windows 2008
щелкните правой кнопкой мыши на каталоге git repo или родительском каталоге.
Свойства> вкладка «Общий доступ»> «Расширенный общий доступ»> «Разрешения»> убедитесь, что у пользователя есть соответствующие права доступа.
источник
Возможно, вы случайно вложили git-репозитории
источник
Также возможно, что вы добавили другой локальный репозиторий с тем же псевдонимом. Например, теперь у вас есть 2 локальные папки, которые называются
origin
так, что при попытке отправки удаленный репозиторий не будет принимать ваши учетные данные.Переименуйте псевдонимы локального репозитория, вы можете перейти по этой ссылке https://stackoverflow.com/a/26651835/2270348
Может быть, вы можете оставить 1 локальный репозиторий по своему вкусу, а
origin
другие переименовать их, например, изorigin
вanotherorigin
. Помните, что это просто псевдонимы, и все, что вам нужно сделать, это запомнить новые псевдонимы и их соответствующие удаленные ветви.источник
Работает для меня
источник
Я получил это при подключении к проекту Rstudio. Я понял, что забыл сделать:
при запуске программы. На самом деле, поскольку у меня есть еще одна ошибка, мне нужно сделать:
источник
Использовать sudo для коммита -m
источник
Я получал эту проблему с удаленным репозиторием на общем ресурсе Samba; Я успешно вытащил из этого пульта, но не смог при нажатии на него.
Причиной ошибки были неверные учетные данные в моем
~/.smbcredentials
файле.источник