Gancho git global

Gancho git global

¿Es posible conectar todas las formas de crear un repositorio de git? Entonces puedo ejecutar el script cuando se clona, ​​inicializa el repositorio... (¿hay otras formas, excepto mover/copiar carpeta?).

Mi intención es realizar un seguimiento de todos los repositorios, por lo que no necesito revisar todos los directorios para ejecutar alguna acción (principalmente git statusporque a veces me olvido de realizar cambios git gc --auto).

Respuesta1

Los enlaces (actualmente) se configuran exclusivamente por repositorio, por lo que no puede haber enlaces activos antes de que se cree un repositorio.

Si solo desea inicializar algunas configuraciones específicas del repositorio de manera idéntica para todos los repositorios nuevos, es posible que pueda usar elmecanismo de plantilla de repositorio.

Usando tu propia plantilla puedes

  • instalar ganchos activados (proporcionando un <template‑dir>/hooks/<hook‑name>archivo),
  • establecer variables de configuración (proporcionando un <template‑dir>/configarchivo), y
  • configure reglas o atributos de exclusión por repositorio (proporcionando un archivo <template‑dir>/info/excludeo <template‑dir/info/attributes>).

Cualquier archivo de configuración que se encuentre en un .gitdirectorio se puede colocar en una plantilla para que sirva como copia inicial de ese archivo en nuevos repositorios inicializados a partir de la plantilla. Supongo que incluso podrías proporcionar objetos y referencias iniciales.

Una vez que tenga un directorio de plantillas creado con sus personalizaciones, debe indicar git initdónde git cloneencontrarlo. Esto se puede hacer explícitamente con la --templateopción (Git 0.99.4 o posterior), o implícitamente con la GIT_TEMPLATE_DIRvariable de entorno (Git 1.5.0 o posterior), o implícitamente estableciendo la init.templatedirvariable de configuración en el modo “global” (por usuario) o Archivos de configuración de Git del “sistema” (es decir, ~/.gitconfigo /etc/gitconfig(varía según la instalación); Git 1.7.1 o posterior).

Respuesta2

No puede "rastrear" repositorios de git (como en "preguntar a algún referencial central la lista de repositorios de git actualmente activos).
Cada repositorio de git es independiente de otro.

Se podrían considerar dos soluciones:

  • una plantilla de git como en la respuesta de Chris, con uno de losganchos del lado del clientecapaz, en el primer uso, de registrar el repositorio de git en algún archivo "central".
    Ese archivo luego sería leído por un script externo (externo a git), para hacer lo relevante git statuso git gclo que desee.

  • Si todos sus repositorios de git se declaran en el mismo directorio común, puede declarar un repositorio de git principal global y agregar todos los subrepositorios comosubmódulos.
    Desdegit1.7.0, git statussabe cuándo un submódulo contiene cambios no confirmados.

información relacionada