
Можно ли перехватить все способы создания 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
знает, когда подмодуль содержит незафиксированные изменения.