Нужно запустить "крючок" для новой метки Git (крючок Git для вновь вытащенных меток) - PullRequest
2 голосов
/ 10 апреля 2020

Для начала я посмотрел на этот вопрос, который, кажется, единственный, касающийся этой топи c:

Но я не понимаю, что это за хук или как он используется. Я просто хочу запустить небольшой скрипт, который будет обновляться, если я git pull и получу новый тег.

Я попытался вставить его: .git/hooks/update, .git/hooks/post-receive

#!/bin/bash
exec < /dev/tty

CURRENT_TAG=$(git tag --contains)
echo Test Test
echo "LATEST_TAG: \"${CURRENT_TAG}"\" > "config/latest_tag.yml"

Я бы хотел использовать Git крючки, если это возможно. Я думал о том, чтобы сделать alias "git pull"="git pull && ./update_script.sh, но я не могу использовать псевдонимы через пробел, ни я, ни что-нибудь другое, чтобы заставить псевдонимы помнить это.

1 Ответ

1 голос
/ 12 апреля 2020

Как указано в в документации , перехваты после получения и обновления являются перехватчиками на стороне сервера, т.е. они запускаются на сервере в ответ на pu sh от клиента. То, что вы хотите, - это обратное, для которого, к сожалению, нет хука.

Поскольку вы упоминаете, что псевдоним команды не сработает, вы можете использовать функцию в качестве следующей лучшей вещи. Он получит аргументы, которые затем могут быть проверены.

git() { env git $* && [ "$1" = "fetch" -o "$1" = "pull" ] && ./update_script.sh; }

Необходимо соблюдать осторожность, когда такие команды слежки не вызывают бесконечной рекурсии. Внутри тела функции вы никогда не должны вызывать git напрямую, так как это перезапустит функцию, а не команду git. Я использовал env для разрешения фактического двоичного файла git, но использование абсолютного пути также сработало бы.

Обратите внимание, что на самом деле git fetch получит новые теги и git pull просто звонит git fetch изнутри. Поэтому я включил обработку для fetch и pull. Также обратите внимание, что она будет скрывать команду git во всех репозиториях, поэтому ее необходимо будет расширить, если специальная обработка должна применяться только к конкретным c репозиториям.

В случае, если ваш update_script.sh отслеживаемые в самом репозитории, по крайней мере, нужно знать о двух вещах:

  • Любой, кто может сделать sh изменения в этот файл, по сути, будет включен для запускать произвольные команды на любом компьютере, где происходят операции извлечения.
  • Поскольку команды pull или fetch могут выполняться в любом месте рабочего дерева, а не только на верхнем уровне, путь должен быть сначала разрешено с помощью [env] git rev-parse --show-toplevel.
...