Изменить стандартные 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
, Символические ссылки не работают.