Статьи

Git Hooks для удовольствия и прибыли

Когда выполняются определенные команды, Git ищет в каталоге .git/hooks Там вы найдете небольшой набор примеров скриптов (вы можете активировать их, переименовав их, чтобы удалить префикс .sampleстранице руководства githooks (5) .

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

Lint Checks

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

Следующий код оболочки может быть сохранен как .git/hooks/pre-commit

[Оболочки] #! / Bin / Баш

git diff –cached –name-status –diff-filter = ACMR | во время чтения STATUS FILE; делать
if [[«$ FILE» = ~ ^. + (php | inc) $]]; тогда
php -l «$ FILE» 1> / dev / null
если [$? -не 0]; тогда
echo «Отмена коммита из-за файлов с синтаксическими ошибками»> & 2
выход 1
фи
фи
Выполненные [/ оболочка]

git diff Файлы с расширением .php.inc Ваш код может содержать ошибки, но, по крайней мере, вы знаете, что у него есть все точки с запятой.

Сообщения проверки правописания

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

Сообщения коммита дают читателю общее представление о том, какие изменения были внесены в коммит, и, следовательно, могут быть прочитаны широкой аудиторией, от других разработчиков до аудиторов соответствия. Даже если вы пишете код только для себя, написание профессиональных сообщений — хорошая привычка для развития, а автоматизация «второго взгляда» может помочь уменьшить количество орфографических ошибок в ваших сообщениях comit .

Следующий код может быть сохранен как .git/hooks/post-commit он вызывает Aspell и выводит список подозрительных слов. Если есть ошибки, вы можете немедленно исправить сообщение коммита, запустив git commit --amend

[Оболочки] #! / Bin / Баш

ASPELL = $ (который отменяет)
если [$? -не 0]; тогда
echo «Aspell не установлен — невозможно проверить орфографию»> & 2
выход
фи

AWK = $ (который awk)
если [$? -не 0]; тогда
echo «Awk не установлен — невозможно отфильтровать орфографические ошибки»> & 2
СЛОВА = $ ($ ASPELL list <«$ 1»)
еще
СЛОВА = $ (список $ ASPELL <«$ 1» | $ AWK ‘! _ [$ 0] ++’)
фи

if [-n «$ WORDS»]; тогда
echo «В сообщении о фиксации обнаружены возможные орфографические ошибки:» $ WORDS> & 2
Fi [/ оболочка]

Вы также можете скомпилировать дополнительный словарь, используя идентификаторы, извлеченные из исходного кода вашего проекта (возможно, с помощью ловушки после проверки) и передать его в Aspell с помощью --extra-dicts Парсинг кода и управление файлами словарей выходит за рамки этой статьи, поэтому я оставлю это упражнение для дальнейшего изучения.

Проверка стандартов

Я не знаю ни одного научного исследования, которое бы определенно доказывало, что стандарты форматирования уменьшают когнитивные трения при чтении кода. Большинство стандартов раздражающе нацелены только на низко висящие фрукты: капитализируйте что-то таким образом, размещайте свои скобки здесь, а не там, и т. Д. Стандарты, которые обеспечивают хороший архитектурный дизайн и решают конкретные проблемы совместимости, на мой взгляд, заслуживают большего внимания.

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

[Оболочки] #! / Bin / Баш

DIR = $ (git rev-parse –show-toplevel)
EMAIL = $ (git config user.email)
TMPFILE = $ (Mktemp)

git diff –cached –name-status –diff-filter = ACMR | во время чтения STATUS FILE; делать
if [[«$ FILE» = ~ ^. + (php | inc) $]]; тогда
phpcs –standard = zend «$ FILE» >> $ TMPFILE
фи
сделано

if [-s $ TMPFILE]; тогда
mailx -s «PHPCS: Нарушения стандартов кодирования» $ EMAIL <$ TMPFILE
фи
rm $ TMPFILE [/ shell]

Сценарий использует PHP CodeSniffer для сканирования каждого PHP-файла в фиксации на наличие нарушений, а затем отправляет электронное письмо со списком обнаруженных нарушений. Если для управления электронной почтой вы используете один из таких подходов, связанных с производительностью модных слов, как Getting Things Done , вы можете настроить почтовый фильтр, который будет направлять полученные письма прямо в вашу папку TODO, чтобы обеспечить своевременное исправление нарушений.

Автоматически запускать Composer

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

Предположим также, что вы используете Composer для управления зависимостями вашего приложения и храните только свой собственный код в своем хранилище. Это означает, что у вас все еще есть дополнительная работа, которую нужно выполнить после отправки, либо скопировать зависимости вручную, либо выполнить ssh-файл на сервере для запуска composer.phar update

Чтобы сделать вашу жизнь проще, если поместить это в файл .git/hooks/post-receive

[Оболочки] #! / Bin / Баш

DIR = $ (git rev-parse –show-toplevel)

if [-e «$ DIR / composer.json»]; тогда
if [-d «$ DIR / vendor»]; тогда
composer.phar установить
еще
обновление composer.phar
фи
Fi [/ оболочка]

Вывод

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

Вот несколько дополнительных ресурсов для подсказок, советов и вдохновения: