имеется:
сервер с git-ом и доступом по протоколу ssh
на сервере в каталоге /путь/к/ создано обыкновенное (не-bare) git-хранилище командой git init
у пользователя, от имени которого подключаюсь, есть права на запись в этот каталог
требуется:
чтобы при отправке изменений командой git push в любую ветку из локального клона этого хранилища обновлённые файлы тут же появлялись на сервере в рабочем каталоге /путь/к/ именно в том виде, как они представленны в этой самой ветке
да, я знаю про подводные камни. меры приняты.
как настроить хранилище на сервере, чтобы оно работало именно так, как мне требуется?
Ответ
на сервере:
в каталоге /путь/к/ выполните команду:
$ git config receive.denyCurrentBranch ignore
в хранилище (/путь/к/.git/) создайте файл /путь/к/.git/hooks/post-update следующего содержания:
#!/bin/sh
GIT_WORK_TREE=$(dirname $PWD) git reset --hard $(git rev-parse $1)
добавьте этому файлу биты исполнимости:
$ chmod +x /путь/к/.git/hooks/post-update
всё.
теперь можете клонировать это хранилище себе локально:
$ git clone пользователь@сервер:/путь/к/
добавлять файлы, ветки, коммитить и отправлять изменения на сервер командой git push (понятно, что если ветки на сервере ещё не существует, надо будет её указать, например, так: git push origin ветка).
если вдруг понадобится переключиться на другой коммит/ветку без создания нового коммита, то придётся «вручную» на сервере выполнить (в каталоге /путь/к/) git checkout -f ... или git reset --hard ...
навеяно этими вопросами (и ответами к ним) с одной целью — упростить процесс:
Настройка и развертывание проекта c помощью Git
Deploy a project using Git push
Комментариев нет:
Отправить комментарий