Если вам нужно выполнить скрипт после git pull
на стороне клиента (на вашем компьютере), то надежного решения не существует.
хук на стороне клиента после слияния ( упомянутое здесь ) не будет срабатывать при каждом извлечении (например, не при перебазировании по вытягиванию, не в случае слияния с перемоткой вперед)
Таким образом, псевдоним, заключающий в себе обаКоманды остаются возможным обходным путем.
Оригинальный ответ (2011)
Если вам это нужно на стороне сервера, где вы бы извлекли пустое хранилище и извлекли из рабочего дерева (включеносервер) после каждого нажатия на репо (на сервере):
A post-receive
или post-update
хук обычно используется для этого типаЗадача, выполняемая после каждого нажатия.
Разница между post-receive и post-update hooks заключается в аргументах: post-receive
получит как старый, так иновые значения всех ссылок в дополнение к их именам.
Недостает часть: где that hook выполняется сам по себе?
Сообщение в блоге " Документация об отсутствующих git hooks * " от (великого) SO участника Mark Longair проливает некоторый свет на это:
текущим рабочим каталогом будет каталог git .
- Итак, если это пустой репозиторий с именем «
/src/git/test.git/
», это будет текущий рабочий каталог - если это не пустой репозиторий, а верхний уровень рабочего дерева - «/home/mark/test/
», тогда текущим рабочим каталогом будет« /home/mark/test/.git/
»
Крис Джонсен подробности в его SO ответе :« Если –-git-dir
или указаны GIT_DIR
, но не указаны ни один из -–work-tree
, GIT_WORK_TREE
и core.worktree
, текущий рабочий каталог рассматривается как верхний каталог вашего рабочего дерева. "
Другими словами, вашрабочее дерево также будет текущим каталогом (каталог «.git
» ), , что почти наверняка не то, что вам нужно .
MakeУбедитесь, что ваш hook/post-receive
сценарий, когда он создан и выполнен исполняемым, устанавливает GIT_WORK_TREE
по правильному пути, чтобы ваш ./sync-all pull
выполнялся в правильном каталоге (то есть не в «xxx.git
»).