DevGang
Авторизоваться

Использование хуков git до фиксации и после обновления 

Добавление некоторой дополнительной обработки к вашему рабочему процессу git иногда полезно / круто / интересно, а функциональность, предоставляемая githooks, делает это довольно доступным для использования. Я обычно использую очень немногие из них (вместо того, чтобы что-то происходило на стороне сервера - тесты и т.д., которые могут быть включены извне или с помощью обработчиков на стороне сервера) на стороне клиента, и адаптирую два, включенных в .git/hooks/ по умолчанию, pre-commit и post-update, как вы уже догадались, до того, как будут сделаны коммиты, и после того, как набор коммитов будет отправлен.

В качестве инженера по эксплуатации я часто использую такие инструменты, как Terraform, преимущество которого заключается в том, что он включает инструмент форматирования и инструмент проверки - это хороший пример того, где может быть полезен хук предварительной фиксации, - прежде чем я создам фиксации, я могу проверить манифест и проверить форматирование / стиль обновляемых манифестов. Я могу сделать это, изменив в корне моего проекта .git/hooks/pre-commit.sample и добавив что-то вроде этого для проверки файлов .tf на соответствие этим стандартам:

modified_files=$(git ls-files -m)
for f in modified_files
do
    if [-e "$f" ] && [[ $f == *.tf ]]; then
        terraform validate $(dirname $f)
        terraform fmt $f -check=true
        git add $f
    fi
done

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

Чтобы включить эту ловушку, скопируйте файл в .git/hooks/pre-commit (без .sample).

Давайте посмотрим на более сложный пример в моем сценарии post-update. В моем случае я работаю на Mac, поэтому я хотел бы максимально использовать это - возможно, ввести еще несколько визуальных подсказок, которым я буду следовать, поэтому я также хочу использовать некоторый Applescript.

В .git/hooks/post-update, я хочу получить хэш и сообщение последней отправленой фиксации, а также ветку, которую я отправил:

COMMIT=$(git log -1 HEAD | head -n 1 | awk '{print $1}')
MESSAGE=$(git log --format=%B -n 1 $COMMIT | xargs echo )
BRANCH=$(git branch | grep \* | cut -d ' ' -f2)

и чтобы сделать это полезным, я могу увидеть сводку моего последнего push, добавив этот вызов в osascript:

/usr/bin/osascript <<EOF
display dialog "To $BRANCH:\n\n$MESSAGE\n\n\t($COMMIT)\n" with title "Git Push" buttons {"I meant to do that"} default button 1

Чтобы появилось всплывающее диалоговое окно и просто напоминание о том, что я сделал, поэтому я останавливаюсь, чтобы проверить свою работу в последний раз, прежде чем перейти к следующей задаче.

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В подарок 100$ на счет при регистрации

Получить