Честно говоря, я прочитал несколько объяснений этого сообщения об ошибке git: я не смог их понять. Хотя я решил проблему для своих целей, я хотел бы попросить понять, почему git предоставляет разрешение на сервере репозитория, когда я его исследовал:
По какой-то причине git нужна папка objects в репозитории на его ssh-сервере, куда пользователи push или pull. По какой-то причине (?) Git создает папки под объектами со случайными именами в диапазоне от 01 до ff.
Проблема в том, что папки под объектами принадлежат фактическому пользователю, который отправляет новую ревизию в этот репозиторий с разрешением доступа 775 — то есть только этот пользователь и пользователи в его группе могут писать в эту папку.
Поскольку репозиторий используется какое-то время, 255 возможных имен совпадают. Имя папки под объектами необходимо будет повторно использовать в ходе push. Если отправляющий пользователь не совпадает с тем, кто создал папку (например, несколько недель назад), он увидит сообщение об ошибке невозможно перенести объекты в постоянное хранилище из-за упомянутого нарушения прав.
Решение состоит в том, что отправляющий пользователь становится членом группы пользователя, который отправляет последний раз, используя то же имя папки objects.
Есть ли какой-либо механизм для git ssh-сервера, чтобы избежать такого конфликта более удобным способом? Как мне избежать добавления нового пользователя во все группы всех существующих пользователей, чтобы избежать конфликтов разрешений для папок objects?
git config core.sharedRepository=0660; stackoverflow.com/search?q=%5Bgit%5D+sharedrepository — person ngong schedule 27.11.2020
@phd отличный совет! — person ngong schedule 27.11.2020
@phd отлично! Сочувствие! Если по умолчанию не используется общий доступ, почему многие пользователи могут нажимать на репо, пока не появится это сбивающее с толку сообщение об ошибке? Я что-то сделал не так изначально? Мне нравится просто вводить pub-ключ нового пользователя в authorized_keys пользователя git. — person ngong schedule 27.11.2020
Я подозреваю, что вы сделали chmod -R g+w. На самом деле вам это нужно еще раз. После установки sharedRespoitory Git сам будет поддерживать групповую запись. — person ngong schedule 27.11.2020
Источник: