Ошибка распаковщика Git-pushing с чистого репо на промежуточный сервер - PullRequest
1 голос
/ 07 ноября 2011

Относится к Ошибка Git pull: невозможно создать временное имя файла 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, но мне сказали, что ничего не нужноpack.

7) Сделал git reset --hard на промежуточном сервере.Не помогло.

8) У меня не осталось свободного места на диске.

Мне кажется, что я исследовал это и попробовал все, он мне помогает. Может кто-нибудь предложить что-нибудь еще?я мог бы попробовать?

РЕДАКТИРОВАТЬ - я попытался клонировать хранилище в новую папку на промежуточном сервере и изменил конфигурацию git пустого хранилища, чтобы она указывала на эту новую папку в определении для пульта «staging_server».Затем я отправил репозиторий на локальный репозиторий с локального компьютера, а затем попытался переместить репозиторий на промежуточный сервер, и у меня возникла та же проблема:

error: unable to create temporary sha1 filename ./objects/26: No such file or directory

В папке нет объектов / 26.папка git на промежуточном сервере, но я не знаю, почему он не может ее создать.

1 Ответ

3 голосов
/ 07 ноября 2011

Выяснил, что это было, и в результате почувствовал себя тупицей.

Изначально, на промежуточном ящике, репозиторий git находился вне папки приложения.Чтобы сделать это, в конфигурацию git была добавлена ​​опция

worktree = /path/to/app/folder

. В какой-то момент мы решили перенести репозиторий git в рабочую папку в папке .git.по-прежнему.Описанная выше опция все еще была в конфиге, и, хотя это была правильная папка, тот факт, что она вообще там была, мешал распаковщику работать.Как только я выбрал эту опцию из конфигурации, она сразу же заработала.Doh.

...