Я хочу настроить git на несколько необычный вариант использования.
У меня есть сервер репозитория («repo»), и у меня есть сервер разработки («развернуть»), на котором я хочу выполнить развертывание. На сервере репо у меня есть пустое хранилище («origin»), в которое я отправляю свои изменения из локального клона.
Когда я отправляю ветку, называемую «разработка», на сервер репо, у меня появляется ловушка после получения, которая толкает ветку на сервер разработки:
#!/bin/bash
# post-receive on repo server
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "development" == "$branch" ]; then
git push develop development
echo 'Changes pushed to development server.'
fi
done
exit 0;
На сервере разработки у меня есть хук после получения, который читает
#!/bin/bash
GIT_WORK_TREE=/srv/www/htdocs/develop git checkout -f
На сервере разработки может случиться так, что кто-то внес изменения непосредственно в рабочее дерево, которое находится в / srv / www / htdocs /velop, без использования git (да, я знаю, не спрашивайте ...).
Теперь: каков наилучший способ предотвращения проверки на сервере разработки, которая могла бы уничтожить не-гиттерские модификации?
В данный момент я имитирую этот случай, используя ловушку предварительного получения на сервере репо, которая повторяет сообщение и выходит из 1.
Было бы здорово, если бы я сделал
$ git push origin development
и git ответил бы так:
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 706 bytes, done.
Total 9 (delta 3), reused 0 (delta 0)
remote: Unclean working directory on development server. Please fix that first.
To git@repo:development
! [remote rejected] development -> development (pre-receive hook declined)
error: failed to push some refs to git@repo:development'