Настройка крюка после приема для голого репо
У меня есть голое репо, настроенное на моем сервере ubuntu.
После того, как я нажму на мой голый репортай git на сервер:
$ git push origin master
Я хочу, чтобы содержимое моего не голого репо обновлялось последним нажатием, как показано, где не голый репо - это моя фактическая рабочая директория с именем workfiles.
$ cd /central/workfiles
$ git pull
$ exit
Я слышал о крюке после приема, но не знаю, как настроить то же самое.
Как я могу достичь того же.
Ответы
Ответ 1
Я предпочитаю указывать рабочее дерево и каталог git вместо того, чтобы полагаться на cd:
/bare/repo.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/central/workfiles GIT_DIR=/central/workfiles/.git git pull origin master
exit
Как ниже, чем, ChrisV, вы можете также полагаться на один git checkout
вместо a git pull
Я считаю, что git checkout -f
безопаснее, чем git pull
, поскольку слияние, являющееся частью тяги, потенциально может вызвать проблемы, если нужны ручные исправления.
Но это означает, что /central/workfiles
не является "не-голым" git репо. Это просто папка, в которой вы просматриваете содержимое голого репо /bare/repo.git
.
См. Брайан Томас ответ на примере этого подхода.
Это не соответствует спецификации OP.
Ответ 2
Я использую этот прием, например,
#.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/srv/http/sitedir/ git checkout -f
да, обязательно сделайте его выполнимым.
Ответ 3
Я бы пошел с чем-то вроде
#!/bin/sh
cd /central/workfiles
git pull
exit
Сохраните выше script как post-receive
и поместите его в каталог hooks/
вашего голого репо.
В нижней строке не забудьте сделать его выполнимым
chmod +x post-receive