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, и он будет работать.

Другие вопросы по тегам