ГлавнаяОперационные системыLinux5 простых хуков Git для управления вашим репозиторием

5 простых хуков Git для управления вашим репозиторием

Git — великолепный инструмент. Это позволяет вам не только отслеживать изменения в файле использовать крючки, но и беспрепятственно сотрудничать с другими людьми. В этом отношении Git — это один из инструментов, который продвинул вперед развитие FOSS.

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

Примечание. Вы также можете управлять Git в Emacs . Узнайте как!

Что такое Git-хуки?

По своей сути git-hook — это гибкая подкоманда, которую можно использовать для создания пользовательских сценариев, которые запускаются всякий раз, когда Git выполняет действие с репозиторием. Например, можно использовать перехватчик для автоматической проверки вашего репозитория на наличие ошибок стиля еще до того, как вы его зафиксируете.

5 Git Hooks 02 Пример Линтера

Подкоманда «hook» работает, читая папку «hooks» в каталоге «.git» вашего репозитория. Эта па

Что такое Git-хуки?

ых файлов, содержащих пример сценария для каждого действия в Git, которое вы можете автоматизировать.

5 Git Hooks 03 Каталог хуков по умолчанию

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

Совет : чтобы начать работу с Git, вам потребуется сначала настройте имя пользователя и адрес электронной почты Git . Узнайте, как это сделать, в этом руководстве.

1. Запретить отправку в мастер

Одна из наиболее частых ошибок, которые допускает пользователь в Git, — это передача коммита из ветки разработки непосредственно в мастер-версию. Это может быть невероятно неприятно, если вы используете Github для отслеживания и поддержки своих проектов.

5 Git Hooks 04 Пример Git Push

Вы можете предотвратить эту проблему, создав перехватчик Git «pre-push», который будет проверять и подтверждать каждый раз, когда вы пытаетесь отправить репозиторий из основной ветки.

  1. Перейдите в репозиторий Git, который вы хотите защитить.
5 хуков Git 05 CD в репозиторий
  1. Создайте файл-перехватчик Git со своим проверочным скриптом. Поскольку это ловушка, которая должна запускаться перед «push», вам необходимо создать файл «pre-push»:
touch .git/hooks/pre-push
  1. Откройте новый файл ловушки в текстовом редакторе.
nano .git/hooks/pre-push
  1. Внутри напишите новый хук «pre-push». Например, ниже приведен скрипт, который запрашивает ваше подтверждение при отправке из основной ветки:
#!/bin/sh
 
protect='master'
current=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
 
if [ $protect = $current ]
then
    read 

1. Запретить отправку в мастер

master? Y/n." -n 1 -r < /dev/tty echo if echo $REPLY | grep -E '^[Yy]$' > /dev/null then exit 0 fi exit 1 else exit 0 fi
  1. Сохраните новый хук. В nano сделайте это, нажав Ctrl+ O, затем Ctrl+ X.
5 крючков Git 07. Заполненный хук Pre Push
  1. Выполните следующую команду, чтобы убедиться, что Git может запустить ваш новый хук.
chmod +x .git/hooks/pre-push

2. Отклонить отправку сообщений в главную ветку

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

5 Git Hooks 08 Пример журнала Git

Исправьте это, создав ловушку «предварительного получения», которая автоматически предотвратит отправку данных любым пользователем с ограниченными правами в главную ветку.

  1. Создайте файл ловушки Git для предварительного получения в удаленном репозитории.
touch .git/hooks/pre-receive
  1. Откройте этот файл.
nano .git/hooks/pre-receive
  1. Добавьте сценарий отклонения в крючок «предварительного получения». Например, следующие строки кода должны работать «из коробки»:
#!/bin/sh
 
branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
 
blacklist=(alice bob)
 
if [[ ${blacklist[*]} =~ $USER ]]; then
    if [ "$branch" == "master" ]; then
        echo "You are not allowed commit changes in this branch"
        exit 1
    fi
fi
  1. Сохраните новый файл ловушки. В моем случае мне нужно нажать Ctrl+ O, затем Ctrl+ X, чтобы сохранить файл.
  1. Сохраните скрипт-перехватчик и сделайте его исполняемым.
chmod +x .git/hooks/pre-receive

Совет : вы также можете используйте псевдоним Git, чтобы сделать использование Git более эффективным. .

3. Заблокируйте репозиторий от перебазирования

Еще одна распространенная ошибка, которую допускают пользователи в Git, — это перебазирование текущей активной ветки. Это может стать неприятной проблемой, если вы работаете

2. Отклонить отправку сообщений в главную ветку

перебазировании будут удалить коммиты , сделанные другими пользователями.

5 хуков Git 11 Справочная страница Git Rebase<

Вы можете предотвратить эту проблему, создав перехватчик «pre-rebase», который будет проверять, заблокирована ли текущая ветка.

  1. Создайте файл «pre-rebase» в каталоге «.git/hooks»:
touch .git/hooks/pre-rebase
  1. Открыть этот файл для редактирования.
nano .git/hooks/pre-rebase
  1. Добавьте сценарий перебазирования в новый файл ловушки.
#!/bin/sh
 
branch="$2"
[ -n "$branch" ] || branch=$(git rev-parse --abbrev-ref HEAD)
lock="branch.${branch}.rebaselock"
 
if [ "$(git config --bool "$lock")" = true ]; then
echo "pre-rebase hook: \"$lock\" is set to true. Refusing to rebase."
exit 1
fi
  1. Сохраните новый файл ловушки и сделайте его исполняемым.
chmod +x .git/hooks/pre-rebase

4. Принудительная проверка стиля и синтаксиса вашего кода

Одним из наиболее полезных способов использования перехватчика Git является его связывание с линтером кода. Это простая программа, которая проверяет, соответствует ли ваш код стилю и формату проекта.

5. Хуки Git 14. Страница пользователя Shellcheck
  1. Чтобы связать линтер с вашим репозиторием Git, сначала создайте файл ловушки «pre-commit».
touch .git/hooks/pre-commit

<старый старт="2">

  • Установите соответствующий линтер для языка вашего проекта. В данном случае я использую «shellcheck» для анализа кода Bash:
  • sudo apt install shellcheck
    1. Откройте новый файл перехватчика и добавьте следующий скрипт.
    #!/bin/bash
    for file in $(git diff --cached --name-only --diff-filter=AM | grep -E '\.sh$')
    do
     
      shellcheck "$file" # Run the linter for every new file.
     
      if [ $? -ne 0 ]; then
        exit 1 

    3. Заблокируйте репозиторий от перебазирования

    > fi done
    1. Сохраните новый файл ловушки и сделайте его исполняемым:
    chmod +x .git/hooks/pre-commit

    5. Автоматически уведомлять пользователей об изменениях в репозитории

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

    1. Создайте файл ловушки «после получения» в каталоге.git/hooks вашего репозитория:
    touch .git/hooks/post-receive
    1. Откройте новый файл перехватчика Git и введите следующий скрипт:
    #!/bin/sh
     
    commit_message=$(git log -1 --pretty=%B)
    users=("[email protected]" "[email protected]" "[email protected]")
     
    for user in "${users[@]}"; do
        mail -s "New Commit: $commit_message" $user < /dev/null
        done
    1. Сохраните новый файл ловушки и сделайте его исполняемым.
    chmod +x .git/hooks/post-receive

    Часто задаваемые вопросы

    Могу ли я написать свои перехватчики Git на компилируемом языке, например C?

    Одним из самых больших ограничений перехватчиков Git является то, что они требуют использования языка, который можно запускать непосредственно из терминала. Это означает, что перехватчики Git не поддерживают ни один компилируемый язык для своих скриптов. Например, вы можете создать новый перехватчик Git, используя либо Питон , либо Shell, но не C или C++.

    Можно ли запустить несколько перехватчиков в одном репозитории Git?

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

    4. Принудительная проверка стиля и синтаксиса вашего кода

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

    Почему перехватчики электронной почты Git не отправляют электронные письма пользователям?

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

    Изображение предоставлено: Unsplash . Все изменения и скриншоты Рамсеса Рэда.

    5. Автоматически уведомлять пользователей об изменениях в репозитории

    Часто задаваемые вопросы

    Могу ли я написать свои перехватчики Git на компилируемом языке, например C?

    Можно ли запустить несколько перехватчиков в одном репозитории Git?

    Почему перехватчики электронной почты Git не отправляют электронные письма пользователям?

    ПОХОЖИЕ СТАТЬИ

    Популярные записи