Изменить по умолчанию git крючки
Не уверен, что это возможно в git (я его не нашел, но я могу использовать неправильный словарь в моих поисковых запросах), но было бы полезно иметь возможность изменять и разрешать перехваты как значения по умолчанию для все новые репозитории (на момент создания я имею в виду), поэтому их не нужно настраивать каждый раз, когда создается новый репозиторий. Кажется, простой способ сделать это - написать оболочку, которая устанавливает мои крючки и chmods их при создании нового репозитория, но если есть способ, встроенный в git, я бы предпочел использовать это вместо того, чтобы иметь ненужные сценарии-оболочки, вокруг.
Разъяснение скопировано из комментария к теперь удаленному ответу:
Мой вопрос заключается в том, можно ли изменить поведение по умолчанию для ВСЕХ новых репозиториев, поэтому их не нужно настраивать одинаково каждый раз для каждого нового репозитория. Легкий ответ - написать оболочку для создания и настройки репозиториев (он генерирует скрипты hook и chmods), но похоже, что это поведение по умолчанию также должно быть настраиваемым без необходимости этого делать.
Ответы
Ответ 1
На странице git-init
(также работает с git-clone
, если вы клонируете существующее репо вместо создания нового с нуля):
--template=<template_directory>
Provide the directory from which templates will be used. The
default template directory is /usr/share/git-core/templates.
When specified, <template_directory> is used as the source of the
template files rather than the default. The template files include
some directory structure, some suggested "exclude patterns", and
copies of non-executing "hook" files. The suggested patterns and
hook files are all modifiable and extensible.
Вы можете изменить каталог всей системы (который по умолчанию равен /usr/share/git-core/templates
, но может находиться в другом месте на вашем компьютере), вы можете указать --template=<template_directory>
в командной строке при создании или клонировании репо, или вы можете настроить каталог шаблонов по умолчанию в своем файле конфигурации:
[init]
templatedir = /path/to/templates
Ответ 2
С git 2.9 у вас есть новая опция для централизации перехватов: core.hooksPath
См. commit 867ad08, зафиксировать de0824e, commit bf7d977, совершить 49fa52f (04 мая 2016 г.) Ævar Arnfjörð Bjarmason (avar
).
(слияние Junio C Hamano - 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>
См. commit 9445b49 (16 августа 2016 г.) Йоханнес Шинделин (dscho
).
(объединено Junio C Hamano - gitster
- в commit 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()
соответственно. Этот патч исправляет это.
Ответ 3
Создайте каталог git-hooks/
внутри своего репо. Поместите общие крючки туда.
Пусть люди сами решат, хотят ли они символически ссылаться и быть уязвимыми для изменений, выполняемых как их, или копировать файлы. Работа с Symlinks, люди могут выбрать, чтобы открыть такой вектор атаки безопасности, если они захотят.
Ответ 4
С 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. Они все равно будут образцами, но они будут вашими образцами.
Я не экспериментировал с созданием файла без образца в каталоге; он может быть или не быть скопирован. Будьте осторожны при изменении настроек по умолчанию, однако - при следующем обновлении вам придется переделать изменения.
Ответ 5
Для десортологии MacPorts будет /opt/local/share/git-core/templates/
Чтобы делиться крючками или шаблонами с членами группы, я обычно создаю подкаталог в
проект вроде $PROJECT_DIR/lib/git/hooks
затем создайте задачу Rake или оболочку script
для копирования cp $PROJECT_DIR/git/hooks/* $PROJECT_DIR/.git/hooks
.
Символические ссылки не работают.