Git — великолепный инструмент. Это позволяет вам не только отслеживать изменения в файле использовать крючки, но и беспрепятственно сотрудничать с другими людьми. В этом отношении Git — это один из инструментов, который продвинул вперед развитие FOSS.
Однако одна из самых больших проблем Git заключается в том, что управление репозиториями требует времени и усилий. Например, для фиксации и синхронизации этих репозиториев может потребоваться две-три команды git. Это делает управление ими не только утомительным, но и подверженным ошибкам пользователя. Здесь мы покажем вам несколько простых, но эффективных приемов Git, которые помогут лучше управлять вашими репозиториями.
Примечание. Вы также можете управлять Git в Emacs . Узнайте как!
Что такое Git-хуки?
По своей сути git-hook — это гибкая подкоманда, которую можно использовать для создания пользовательских сценариев, которые запускаются всякий раз, когда Git выполняет действие с репозиторием. Например, можно использовать перехватчик для автоматической проверки вашего репозитория на наличие ошибок стиля еще до того, как вы его зафиксируете.
Подкоманда «hook» работает, читая папку «hooks» в каталоге «.git» вашего репозитория. Эта па
Contents
- 1 Что такое Git-хуки?
- 2 1. Запретить отправку в мастер
- 3 2. Отклонить отправку сообщений в главную ветку
- 4 3. Заблокируйте репозиторий от перебазирования
- 5 4. Принудительная проверка стиля и синтаксиса вашего кода
- 6 5. Автоматически уведомлять пользователей об изменениях в репозитории
- 7 Часто задаваемые вопросы
Что такое Git-хуки?
ых файлов, содержащих пример сценария для каждого действия в Git, которое вы можете автоматизировать.По большей части вы можете написать перехватчик git на любом языке сценариев, который вам нужен. Это делает его невероятно гибким и доступным для любого разработчика программного обеспечения.
Совет : чтобы начать работу с Git, вам потребуется сначала настройте имя пользователя и адрес электронной почты Git . Узнайте, как это сделать, в этом руководстве.
1. Запретить отправку в мастер
Одна из наиболее частых ошибок, которые допускает пользователь в Git, — это передача коммита из ветки разработки непосредственно в мастер-версию. Это может быть невероятно неприятно, если вы используете Github для отслеживания и поддержки своих проектов.
Вы можете предотвратить эту проблему, создав перехватчик Git «pre-push», который будет проверять и подтверждать каждый раз, когда вы пытаетесь отправить репозиторий из основной ветки.
- Перейдите в репозиторий Git, который вы хотите защитить.
- Создайте файл-перехватчик Git со своим проверочным скриптом. Поскольку это ловушка, которая должна запускаться перед «push», вам необходимо создать файл «pre-push»:
touch .git/hooks/pre-push
- Откройте новый файл ловушки в текстовом редакторе.
nano .git/hooks/pre-push
- Внутри напишите новый хук «pre-push». Например, ниже приведен скрипт, который запрашивает ваше подтверждение при отправке из основной ветки:
#!/bin/sh protect='master' current=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') if [ $protect = $current ] then read1. Запретить отправку в мастер
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
- Сохраните новый хук. В nano сделайте это, нажав Ctrl+ O, затем Ctrl+ X.
- Выполните следующую команду, чтобы убедиться, что Git может запустить ваш новый хук.
chmod +x .git/hooks/pre-push
2. Отклонить отправку сообщений в главную ветку
Помимо запрета отправки сообщений на главную ветку, вы также можете создать перехватчик на стороне сервера, который будет отклонять любые отправки на главную ветку. Это невероятно полезно, если вы используете репозиторий совместно с несколькими разработчиками.
Исправьте это, создав ловушку «предварительного получения», которая автоматически предотвратит отправку данных любым пользователем с ограниченными правами в главную ветку.
- Создайте файл ловушки Git для предварительного получения в удаленном репозитории.
touch .git/hooks/pre-receive
- Откройте этот файл.
nano .git/hooks/pre-receive
- Добавьте сценарий отклонения в крючок «предварительного получения». Например, следующие строки кода должны работать «из коробки»:
#!/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
- Сохраните новый файл ловушки. В моем случае мне нужно нажать Ctrl+ O, затем Ctrl+ X, чтобы сохранить файл.
- Сохраните скрипт-перехватчик и сделайте его исполняемым.
chmod +x .git/hooks/pre-receive
Совет : вы также можете используйте псевдоним Git, чтобы сделать использование Git более эффективным. .
3. Заблокируйте репозиторий от перебазирования
Еще одна распространенная ошибка, которую допускают пользователи в Git, — это перебазирование текущей активной ветки. Это может стать неприятной проблемой, если вы работаете
2. Отклонить отправку сообщений в главную ветку
перебазировании будут удалить коммиты , сделанные другими пользователями.Вы можете предотвратить эту проблему, создав перехватчик «pre-rebase», который будет проверять, заблокирована ли текущая ветка.
- Создайте файл «pre-rebase» в каталоге «.git/hooks»:
touch .git/hooks/pre-rebase
- Открыть этот файл для редактирования.
nano .git/hooks/pre-rebase
- Добавьте сценарий перебазирования в новый файл ловушки.
#!/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
- Сохраните новый файл ловушки и сделайте его исполняемым.
chmod +x .git/hooks/pre-rebase
4. Принудительная проверка стиля и синтаксиса вашего кода
Одним из наиболее полезных способов использования перехватчика Git является его связывание с линтером кода. Это простая программа, которая проверяет, соответствует ли ваш код стилю и формату проекта.
- Чтобы связать линтер с вашим репозиторием Git, сначала создайте файл ловушки «pre-commit».
touch .git/hooks/pre-commit
<старый старт="2">
sudo apt install shellcheck
- Откройте новый файл перехватчика и добавьте следующий скрипт.
#!/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 13. Заблокируйте репозиторий от перебазирования
> fi done
- Сохраните новый файл ловушки и сделайте его исполняемым:
chmod +x .git/hooks/pre-commit
5. Автоматически уведомлять пользователей об изменениях в репозитории
Наконец, вы также можете создать перехватчик Git, который будет автоматически отправлять электронное письмо всякий раз, когда ваш репозиторий получает новый коммит. Это полезно, если вы хотите создать простую систему уведомлений для своего репозитория.
- Создайте файл ловушки «после получения» в каталоге.git/hooks вашего репозитория:
touch .git/hooks/post-receive
- Откройте новый файл перехватчика 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
- Сохраните новый файл ловушки и сделайте его исполняемым.
chmod +x .git/hooks/post-receive
Часто задаваемые вопросы
Могу ли я написать свои перехватчики Git на компилируемом языке, например C?
Одним из самых больших ограничений перехватчиков Git является то, что они требуют использования языка, который можно запускать непосредственно из терминала. Это означает, что перехватчики Git не поддерживают ни один компилируемый язык для своих скриптов. Например, вы можете создать новый перехватчик Git, используя либо Питон , либо Shell, но не C или C++.
Можно ли запустить несколько перехватчиков в одном репозитории Git?
Да. Хотя в приведенных выше примерах хуки показаны как отдельные отдельные функции, вы можете легко комбинировать их вместе, чтобы создать свой собственный уникальный рабочий процесс
4. Принудительная проверка стиля и синтаксиса вашего кода
ситуации кодирования. Например, вы можете использовать как крючок предварительной отправки «Предотвратить отправку в мастер», так и крючок предварительной фиксации «Проверка синтаксиса» в вашем собственном репозитории.Почему перехватчики электронной почты Git не отправляют электронные письма пользователям?
Эта проблема, скорее всего, связана с тем, что ваш удаленный сервер не может правильно отправлять исходящие электронные письма. Чтобы это исправить, убедитесь, что ваш удаленный сервер безопасен имеет работающий агент доставки почты и домен SMTP.
Изображение предоставлено: Unsplash . Все изменения и скриншоты Рамсеса Рэда.