Можно ли управлять скриптами Git hook вместе с хранилищем? - PullRequest
266 голосов
/ 09 января 2009

Мы хотели бы сделать несколько основных скриптов-хуков, которыми мы все можем поделиться - для таких вещей, как предварительное форматирование сообщений коммита. В Git есть скрипты хуков, которые обычно хранятся в <project>/.git/hooks/. Однако эти сценарии не распространяются, когда люди делают клон, и они не контролируются версией.

Есть ли хороший способ помочь всем получить правильные скрипты? Могу ли я просто сделать так, чтобы эти скрипты хуков указывали на скрипты с контролем версий в моем репо?

Ответы [ 11 ]

164 голосов
/ 16 июня 2016

В Гит 2,9 , опция конфигурации core.hooksPath указывает каталог пользовательских хуков.

Переместите ваши хуки в отслеживаемый каталог hooks в вашем хранилище. Затем настройте каждый экземпляр хранилища для использования отслеживаемого hooks вместо $GIT_DIR/hooks:

git config core.hooksPath hooks

В общем случае путь может быть абсолютным или относительным к каталогу, в котором выполняются перехватчики (обычно это корень рабочего дерева; см. Раздел ОПИСАНИЕ man githooks).

132 голосов
/ 09 января 2009

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

Чтобы сделать символическую ссылку на * nix, все, что вам нужно сделать, это:

root="$(pwd)"
ln -s "$root/hooks" "$root/.git/hooks"

используйте ln -sf, если вы готовы перезаписать то, что в .git/hooks

11 голосов
/ 13 февраля 2016

Если ваш проект является проектом JavaScript и вы используете npm в качестве менеджера пакетов, вы можете использовать shared-git-hooks для принудительного применения githooks на npm install.

4 голосов
/ 02 марта 2018

Большинство современных языков программирования, или, скорее, их инструменты сборки, поддерживают плагины для управления перехватчиками git. Это означает, что все, что вам нужно сделать, - это настроить ваш package.json, pom.xml и т. Д., И у кого-либо из вашей команды не останется иного выбора, кроме как выполнить, если они не изменят файл сборки. Плагин будет добавлять контент в каталог .git для вас.

Примеры:

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

4 голосов
/ 06 января 2015

Как насчет git-hooks , он направляет .git/hooks, вызывает в сценарии в каталоге проекта githooks.

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

2 голосов
/ 01 ноября 2017

Мы используем решения Visual Studio (и, следовательно, проекты), которые имеют события до и после сборки. Я добавляю дополнительный проект под названием «GitHookDeployer». Сам проект изменяет файл в событии после сборки. Этот файл настроен для копирования в каталог сборки. Таким образом, проект строится каждый раз и никогда не пропускается. В событии сборки он также гарантирует, что все git-хуки на месте.

Обратите внимание, что это не общее решение, поскольку в некоторых проектах, конечно, нечего строить.

1 голос
/ 23 марта 2019

Вы можете использовать управляемое решение для управления хуками перед фиксацией, например pre-commit . Или централизованное решение для серверных git-хуков, таких как Datree.io . Он имеет встроенные политики, такие как:

  1. Обнаружение и предотвращение слияния секретов .
  2. Правильно применять Конфигурация пользователя Git .
  3. Принудительно Интеграция с билетом Jira - указать номер билета в имени запроса на получение / сообщении о фиксации.

Он не заменит все ваши хуки, но может помочь вашим разработчикам с наиболее очевидными из них без адской настройки установки хуков на каждом компьютер разработчика / репо.

Отказ от ответственности: я один из основателей Datrees

1 голос
/ 01 июля 2018

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

1 голос
/ 25 июля 2017

pre-commit делает это простым для ловушек перед фиксацией. Не отвечает на вопрос OP об управлении произвольными перехватчиками git, но перехваты перед фиксацией, вероятно, наиболее часто используются в целях качества кода.

0 голосов
/ 02 мая 2019

Для Nodejs пользователей простое решение - обновить package.json с

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks", 

Предварительная установка будет запущена до

установка в минуту

и перенаправляет git для поиска хуков внутри каталога . \ Hooks (или любого другого имени по вашему выбору). Этот каталог должен имитировать . \. Git \ hooks с точки зрения имени файла (без .sample) и структуры.

Imagine Maven и другие инструменты сборки будут иметь эквивалент preinstall .

Он также должен работать на всех платформах.

Если вам нужна дополнительная информация, см. https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/

...