Gat fatal: невозможно записать файл new_index
Мы - компания, занимающаяся веб-разработкой, которая переходит на Git.
В конце концов мы намереваемся запустить его полностью локально, но на данный момент у нас есть веб-сайты для разработки, размещенные на сервере Linux, где также находятся репозитории Git (которые я создаю через Tower на моей собственной машине).
Наши разработчики подключаются к этому серверу через AFP (Mac) или Samba (Windows / Linux) и используют комбинацию Tower и Sourcetree для проверки этих изменений.
Наша папка веб-разработки на этом сервере является общей и разрешенной, поэтому все операции чтения / записи выполняются как пользователь www-данных. Не идеал ни в коем случае и не то, что я бы делал на производстве, но это работает для нас. В основном....
Время от времени при попытке создания измененных файлов или их фиксации появляется следующее сообщение об ошибке:
fatal: unable to write new_index file
Иногда это просто "индекс", без префикса "new_".
Я обнаружил, что SSHing к серверу как пользователь www-данных, cd'ing в папку.git в проекте, а затем переименование индекса во что-то другое и обратно часто решает эту проблему. Разрешения (660) являются правильными для файла до и после этого, но трюк с переименованием, похоже, работает.
Помимо очевидной долгосрочной цели, состоящей в том, чтобы Git / веб-сайты работали на собственных машинах разработчика, есть ли решение для этого - или просто не рекомендуется управлять удаленным репозиторием Git?
1 ответ
Похоже, что вы на самом деле разделяете одно и то же рабочее репо между несколькими пользователями, что, в общем, не очень хорошая идея:
- вы открываете конфликты в элементе управления репо - ошибки могут очень хорошо указывать на такой конфликт, переименование файла просто замаскирует его, но я предполагаю, что может произойти потеря набора изменений или даже серьезные повреждения, особенно если разные машины используют разные версии git
- вы теряете личность автора в истории репо
Я бы предложил создать на том же разделе голое репозиторий с общим доступом к группе (специально предназначенный для совместного использования), доступный для машин-разработчиков таким же образом, как и текущее репо (достаточно информации, вы можете начать с https://stackoverflow.com/questions/7632454/how-do-you-use-git-bare-init-repository):
- разработчики будут
git clone
/git pull
из этого голого репо в свои локальные рабочие репо, где они делаютgit commit
их изменения, а затемgit push
их обратно в общий репо - другой репо будет извлечен www-данными из чистого репо на сервере linux для обслуживания веб-сайтов разработчиков;
git pull
в этом случае будет "обновляться" контент со всеми коммитами, вставленными в репо с момента последнегоgit pull
(после этого может потребоваться перезагрузка httpd)
Я знаю, что это старый, но я все еще испытываю ту же проблему. Это не работает через AFP. Вместо этого подключитесь к общему ресурсу по SMB, и он будет работать.