Изменить стандартные git-хуки

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


Уточнение скопировано из комментария к удаленному ответу:

Мой вопрос заключается в том, можно ли изменить поведение по умолчанию для ВСЕХ новых репозиториев, чтобы их не нужно было настраивать одинаково каждый раз для каждого нового репозитория. Простой ответ - написать обертку для создания и настройки репозиториев (она генерирует скрипты ловушек и chmods их), но кажется, что это поведение по умолчанию также должно быть настраиваемым без необходимости делать это.

4 ответа

Решение

От git-initсправочная страница (также работает сgit-cloneесли вы клонируете существующее хранилище вместо создания нового с нуля):

--template =Укажите каталог, из которого будут использоваться шаблоны. 
           каталог шаблонов по умолчанию - / usr / share / git-core / templates.
           Если указано,  используется в качестве источника
           файлы шаблона, а не по умолчанию. Файлы шаблона включают
           некоторая структура каталогов, некоторые предложили "исключить шаблоны", и
           копии неисполняемых файлов "хуков". Предлагаемые шаблоны и
           Все файлы хуков можно изменять и расширять.

Вы можете изменить общесистемный каталог шаблонов (по умолчанию /usr/share/git-core/templates, но может находиться в другом месте на вашем компьютере), вы можете поставить --template=<template_directory> в командной строке, когда вы создаете или клонируете репозиторий, или вы можете настроить каталог шаблонов по умолчанию в вашем конфигурационном файле:

[init]
     templatedir = /path/to/templates

С git 2.9 у вас есть новая опция для централизации хуков: core.hooksPath

См. Коммит 867ad08, коммит de0824e, коммит bf7d977, коммит 49fa52f (04 мая 2016 г.) автор Ævar Arnfjörð Bjarmason ( avar )
(Объединено Юнио С Хамано - gitster - в комитете 6675f50 от 17 мая 2016 г.)

git config документация теперь включает в себя:

core.hooksPath

По умолчанию Git будет искать ваши хуки в $GIT_DIR/hooks каталог.
Установите это на другой путь, например, ' /etc/git/hooks ', и Git попытается найти ваши хуки в этом каталоге, например' /etc/git/hooks/pre-receive "а не в" $GIT_DIR/hooks/pre-receive ".

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

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

Автор этого пути (Ævar Arnfjörð Bjarmason) avar) добавляет в свой коммит:

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


Git 2.10 использует эту новую настройку в git rev-parse --git-path hooks/<hook>

См. Коммит 9445b49 (16 августа 2016 г.) Йоханнеса Шинделина ( dscho )
(Объединено Юнио С Хамано - gitster - в коммите d05d0e9, 19 августа 2016 г.)

rev-parse: уважение core.hooksPath в --git-path

Идея --git-path опция заключается не только в том, чтобы избежать префикса путей с выводом --git-dir все время, но и уважать переопределения для конкретных общих путей внутри .git каталог
(например git rev-parse --git-path objects сообщит значение переменной среды GIT_OBJECT_DIRECTORY, если установлено).

При введении core.hooksPath настройки, мы забыли настроить git_path() соответственно. Этот патч исправляет это.

С git 1.6.5.3 (и некоторыми более ранними версиями) вы получаете примеры хуков в вашем .git/hooks каталог:

$ ls .git/hooks
applypatch-msg.sample     post-update.sample        prepare-commit-msg.sample
commit-msg.sample         pre-applypatch.sample     update.sample
post-commit.sample        pre-commit.sample
post-receive.sample       pre-rebase.sample
$ 

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


Обращаясь к вопросу в комментарии - чтобы изменить установленные образцы хуков по умолчанию, вам нужно найти каталог, в котором git установлено. На моей машине это $HOME/git - так что двоичный файл находится в $HOME/git/bin/git, Тогда каталог, содержащий примеры хуков:

$HOME/git/share/git-core/templates/hooks

Если вы редактируете эти шаблоны (будьте осторожны), то это то, что будет скопировано в новые репозитории git. Они все еще будут образцами, но они будут вашими образцами.

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

Для MacPorts Dorectory будет /opt/local/share/git-core/templates/

Чтобы поделиться хуками или шаблонами с членами команды, я обычно создаю подкаталог в проекте, например $PROJECT_DIR/lib/git/hooksзатем создайте Rake-задачу или скрипт для копирования cp $PROJECT_DIR/git/hooks/* $PROJECT_DIR/.git/hooks, Символические ссылки не работают.

Другие вопросы по тегам