Глобальный git-хук

Глобальный git-хук

Можно ли перехватить все способы создания git-репо? Чтобы я мог запустить скрипт, когда репо клонируется, инициализируется… (есть ли другие способы, кроме перемещения/копирования папки?).

Моя цель — отслеживать все репозитории, чтобы мне не приходилось просматривать все каталоги, чтобы выполнить какое-либо действие (в основном git statusпотому, что я иногда забываю фиксировать изменения и т. д git gc --auto.).

решение1

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

Если вы просто хотите инициализировать некоторые специфичные для репозитория настройки одинаково для всех новых репозиториев, вы можете использоватьмеханизм шаблонов репозитория.

Используя свой собственный шаблон, вы можете

  • установить активированные хуки (предоставив файл <template‑dir>/hooks/<hook‑name>),
  • задать переменные конфигурации (путем предоставления <template‑dir>/configфайла) и
  • настроить правила исключения или атрибуты для каждого репозитория (указав файл <template‑dir>/info/excludeили <template‑dir/info/attributes>).

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

После того, как вы создали каталог шаблонов с вашими настройками, вы должны указать git initи git cloneгде его найти. Это можно сделать явно с помощью --templateопции (Git 0.99.4 или более поздней версии), или неявно с помощью GIT_TEMPLATE_DIRпеременной окружения (Git 1.5.0 или более поздней версии), или неявно, установив init.templatedirпеременную конфигурации в «глобальных» (для каждого пользователя) или «системных» файлах конфигурации Git (т. е. ~/.gitconfigили /etc/gitconfig(зависит от установки); Git 1.7.1 или более поздней версии).

решение2

Вы не можете «отслеживать» репозитории git (например, «запросить у какого-либо центрального справочного источника список активных в данный момент репозиториев git).
Каждый репозиторий git независим от другого.

Можно рассмотреть два решения:

  • шаблон git, как в ответе Криса, с одним изхуки на стороне клиентапри первом использовании можно зарегистрировать git-репозиторий в каком-то "центральном" файле.
    Затем этот файл будет прочитан внешним скриптом (внешним по отношению к git), чтобы сделать релевантный git statusили git gcтот, который вам нужен.

  • Если все ваши репозитории git объявлены в одном и том же общем каталоге, вы можете объявить глобальный родительский репозиторий git и добавить все подрепозитории какподмодули.
    Сгит1.7.0, git statusзнает, когда подмодуль содержит незафиксированные изменения.

Связанный контент