Джанна Тема Лицензия не подтверждена. Перейдите на страницу параметров темы, чтобы подтвердить лицензию. Вам нужна отдельная лицензия для каждого доменного имени.

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

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

5-git-hooks-00-featured-image-800x400.jpg Простые Git-хуки для управления репозиторием

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

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

5-git-hooks-02-example-linter.png Простые Git-хуки для управления репозиторием

Подкоманда hook работает, считывая содержимое папки «hooks» в каталоге «.git» репозитория. Эта папка содержит ряд предварительно настроенных файлов, которые предоставляют скрипт для каждого действия Git, которое можно автоматизировать.

5-git-hooks-03-default-hooks-directory.png Простые Git-хуки для управления репозиторием

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

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

Одна из самых распространённых ошибок пользователей Git — отправка коммита из ветки разработки напрямую в ветку master. Это может быть невероятно утомительно, если вы используете GitHub для отслеживания и поддержки своих проектов.

5-git-hooks-04-example-git-push.png Простые Git-хуки для управления репозиторием

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

  1. Перейти к Git-репозиторий Кого вы хотите защитить. 5-git-hooks-05-cd-to-repository.png Простые Git-хуки для управления репозиторием
  2. Создавать Файл хука Git Используя программу аудита скриптов. Поскольку этот хук должен быть запущен до "толкать" , вам необходимо создать файл-хук. "Предоплата":
    сенсорный .git/hooks/pre-push
  3. Открыть файл крючка Новое в Текстовый редактор.
    nano .git/hooks/pre-push
  4. Внутри напишите Новый хук «до оплаты». Например, ниже приведен скрипт, который запросит у вас подтверждение при выполнении push-запроса из главной ветки:
    #!/bin/sh protect='master' current=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') if [ $protect = $current ] then read -p "Подтверждаете отправку на главный сервер? Y/n." -n 1 -r < /dev/tty echo if echo $REPLY | grep -E '^[Yy]$' > /dev/null then выход 0 fi выход 1 else выход 0 fi
  5. Сохранить Новый крючок. в карликовый Сделайте это, нажав Ctrl + O , Потом Ctrl + X. 5-git-hooks-07-pre-push-hook-filled.png Простые Git-хуки для управления репозиторием
  6. Выполните следующую команду, чтобы убедиться, что Git сможет запустить новый хук.
chmod +x .git/hooks/pre-push

2. Отклонять push-запросы в главную ветку

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

Читайте также:  Как распознать поддельные звонки с помощью голосов искусственного интеллекта Amazon

5-git-hooks-08-git-log-sample.png Простые Git-хуки для управления репозиторием

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

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

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

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

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

Читайте также:  Как полностью удалить Discord с Windows, Mac, Android и iOS

5-git-hooks-11-git-rebase-man-page.png Простые Git-хуки для управления репозиторием

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

  1. созданный файл предварительной перебазировки В руководстве «.git/hooks»:
    сенсорный .git/hooks/pre-rebase
  2. открыть это Файл для редактирования.
    nano .git/hooks/pre-rebase
  3. Добавить сценарий перебазировать внутри Новый файл-хук.
    #!/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” установлен в значение true. Отказ от rebase." exit 1 fi
  4. Сохранить файл крючка Новое и сделайте его осуществимым.
chmod +x .git/hooks/pre-rebase

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

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

5-git-hooks-14-shellcheck-man-page.png Простые Git-хуки для управления репозиторием

  1. Для подключения ЛИНТЕР Сначала создайте файл привязки в вашем Git-репозитории. «Предварительное обязательство».
    сенсорный .git/hooks/pre-commit
  2. установить ЛИНТЕР Подходит для вашего проекта. В данном случае я использую «проверка оболочки» Чтобы проанализировать мой код Bash:
    sudo apt установить shellcheck
  3. Открыть файл крючка Создайте новый и добавьте следующий скрипт.
    #!/bin/bash for file in $(git diff --cached --name-only --diff-filter=AM | grep -E '\.sh$') do shellcheck "$file" # Запустить linter для каждого нового файла. if [$? -ne 0 ]; then exit 1 # Прервать фиксацию, если linter завершился неудачей. fi done
  4. Сохранить файл крючка Создайте новый и сделайте его исполняемым:
    chmod +x .git/hooks/pre-commit

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

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

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

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

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

Читайте также:  Как удалить учетную запись Microsoft на компьютере и мобильном устройстве

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

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

отвечать. Да. Хотя в примерах выше хуки показаны как отдельные функции, вы можете легко объединить их для создания собственного уникального рабочего процесса, что делает хуки Git невероятно гибкими и адаптируемыми к любой ситуации. Например, вы можете использовать в своём репозитории как хук «Prevent Push to Master», так и хук precommit «Syntax Check».

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

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

Перейти к верхней кнопке