Ошибка распаковщика Git-pushing с чистого репо на промежуточный сервер
Связано с Git pull error: невозможно создать временное имя файла sha1
Всем привет. В течение некоторого времени наше приложение было в git-проекте с голым репо на другом сервере. В "голом" репо есть хук пост-получения, который заставляет его отправляться на наш промежуточный сервер, который, в свою очередь, имеет хук пост-получения, чтобы выполнять всю работу, связанную с развертыванием. Все работало нормально, но теперь голое хранилище не может перейти на промежуточный сервер. Это не имеет ничего общего с самим процессом пост-получения, потому что я получаю ту же ошибку, если я ssh на голое хранилище и оттуда вручную выполняю отправку на промежуточный сервер:
Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.74 KiB, done.
Total 7 (delta 5), reused 0 (delta 0)
error: unable to create temporary sha1 filename ./objects/51: No such file or directory
fatal: failed to write object
error: unpack failed: unpacker exited with error code
To ssh://deploy@our-staging-server.com/var/www/apps/e_learning_staging/www
! [remote rejected] develop -> develop (n/a (unpacker error))
error: failed to push some refs to 'ssh://deploy@our-staging-server.com/var/www/apps/e_learning_staging/www'
Я могу пойти на промежуточный сервер и вытащить из него репо, и, если уж на то пошло, нажать на него. Так что "тянуть от А до Б" работает, но "тянуть от А до Б" не работает.
Я видел довольно много людей, имеющих подобные проблемы, и исследовал следующие проблемы:
1) разные пользователи: не проблема, так как отправка выполняется пользователю развертывания, который является единственным пользователем, который используется на промежуточном сервере.
2) права доступа к файлам: я рекурсивно разбил все файлы в.git для развертывания:deploy (пользователь и группа, которые мы используем) и рекурсивно изменил u +w, g +w на все файлы в.git
3) git-fsck, git-gc. Я сделал это на репо и на промежуточном сервере.
4) права доступа к новому файлу: выполнение 'umask' на промежуточном сервере дает 0022, что эквивалентно u=rwx,g=rx,o=rx
так что должно быть хорошо. На всякий случай я изменил его на 0002, который теперь позволяет группе делать что-либо так же, как и пользователю, - без разницы.
5) Настройка sharedRepository=true в.git/config на промежуточном сервере. Я сделал это, думая, что, возможно, это было необходимо для того, чтобы подтолкнуть его к голому репо. Не имело никакого значения (это никогда не устанавливалось прежде, когда все это работало, так или иначе), таким образом, я взял это снова.
6) git-repack: я попробовал repack, но мне сказали, что паковать нечего.
7) сделал git reset --hard
на промежуточном сервере. Не помогло
8) Не осталось свободного места на диске.
Я чувствую, что я исследовал это и попробовал все, это делает меня. Может кто-нибудь предложить что-нибудь еще, что я мог попробовать?
РЕДАКТИРОВАТЬ - я попытался клонировать репо в новую папку на промежуточном сервере и изменил git config пустого репозитория, чтобы он указывал на эту новую папку в определении для "staging_server" remote. Затем я отправил репо с моего локального компьютера в "голое" хранилище, а затем попытался перейти с репо на промежуточный сервер, и у меня возникла та же проблема:
error: unable to create temporary sha1 filename ./objects/26: No such file or directory
В папке.git на промежуточном сервере нет папки objects/26, но я не знаю, почему он не может ее создать.
1 ответ
Выяснил, что это было, и в результате почувствовал себя тупицей.
Первоначально в промежуточном окне git-репо находилось вне папки приложения. Для того, чтобы эта работа работала, была добавлена опция, которую мы добавили в git config:
worktree = /path/to/app/folder
В какой-то момент мы решили переместить git-репо в фактическую рабочую папку, как обычно в папку.git. Описанная выше опция все еще была в конфиге, и, хотя это была правильная папка, тот факт, что она вообще там была, мешал распаковщику работать. Как только я выбрал эту опцию из конфига, она сразу заработала. Doh.