Global Git Hook

3253
tig

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

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

4

2 ответа на вопрос

4
Chris Johnsen

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

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

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

  • установить активированные хуки (предоставив <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переменную конфигурации в «global» (для пользователя) или «Системные» файлы конфигурации Git (т.е. ~/.gitconfigили /etc/gitconfig(зависит от установки); Git 1.7.1 или более поздняя версия).

Спасибо за ответ, но это не то, что я искал: я хочу отслеживать все репозитории, я добавил строку о своем намерении в вопрос. tig 13 лет назад 0
0
VonC

Вы не можете «отслеживать» репозитории git (как в «запросить какой-то центральный референс список текущих активных репозиториев git)
.

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

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

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

Примечание: в `git submodules 'есть довольно полное введение по этому вопросу: http://longair.net/blog/2010/06/02/git-submodules-explained VonC 13 лет назад 0

Похожие вопросы