Костыльная автоматизация на продакшене: git add не работает в хуке pre-receive

Имеется git репозиторий (не bare) на продакшене, задача состоит в максимальной автоматизации синхронизации исходников на машинах девелоперов с продакшеном.
В рамках задачи выработал решение:
  1. На pre-receive добавлять изменения из рабочей копии на продакшн сервере в репозиторий и делать коммит, т.к. доступ имеют еще и сео-специалисты и другие отделы, закачивают и удаляют свои файлы
  2. На post-receive принудительно выкладываем содержание репозитория на продакшн, с помощью git-checkout -f
Так вот, второй пункт работает давным давно и успешно, а с первым возникли проблемы, и выражаются они в том, что при попытке добавления файлов в рабочей директории git add . команда выдает ошибку добавления файла .git/COMMIT_EDITMSG
error: unable to add .git/COMMIT_EDITMSG to index
fatal: adding files failed
Почему git пытается добавить файлы из своей директории — для меня осталось загадкой…

Есть у меня в голове вариант реализации данного workflow в обход добавления всех файлов — парсить вывод git status, обрабатывая соответственные изменения с помощью git add и git rm, но мне кажется, что проблема где то выше и на поверхности, а мне не хватает опыта.

Если же я в чем-то архитектурно не прав и все можно организовать иначе — внимательно выслушаю ваш вариант реализации.
Стоит добавить, что данная машинка у нас admin-managed, соответственно прав root у меня нет, и — соответственно — нет прав на cron.

Прикладываю содержание хука pre-receive:
#!/bin/sh

#### указываем рабочие папки
export GIT_WORK_TREE=/workingpath
export GIT_DIR=/workingpath/.git
#### добавляем новые изменения
git add .
#### обновляем модификации
git add -u .
#### фиксируем
git commit -a -m 'Sync on remote PUSH'
#### на время тестирования фэйлим все коммиты
exit 1


git version 1.5.6.5
  • Вопрос задан
  • 4263 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы