Имеется git репозиторий (
не bare) на продакшене, задача состоит в максимальной автоматизации синхронизации исходников на машинах девелоперов с продакшеном.
В рамках задачи выработал решение:
- На
pre-receive
добавлять изменения из рабочей копии на продакшн сервере в репозиторий и делать коммит, т.к. доступ имеют еще и сео-специалисты и другие отделы, закачивают и удаляют свои файлы
- На
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