Global Git hook

4

Est-il possible d’accrocher tous les moyens de créer git repo? Je peux donc exécuter un script lorsque le référentiel est cloné, initialisé… (existe-t-il un autre moyen, à l'exception du déplacement / de la copie d'un dossier?).

Mon intention est de suivre tous les dépôts, donc je n’ai pas besoin de passer par tous les répertoires pour exécuter une action (principalement git status comme j'oublie parfois de commettre des changements et git gc --auto ).

tig
la source

Réponses:

5

Les crochets sont (actuellement) exclusivement configurés par référentiel. Par conséquent, il ne peut y avoir de crochets actifs avant la création d'un référentiel.

Si vous souhaitez simplement initialiser de manière identique certains paramètres spécifiques à un référentiel pour tous les nouveaux référentiels, vous pouvez utiliser le mécanisme de modèle de référentiel .

En utilisant votre propre modèle, vous pouvez

  • installer les crochets activés (en fournissant un <template‑dir>/hooks/<hook‑name> fichier),
  • définir des variables de configuration (en fournissant un <template‑dir>/config fichier), et
  • configurer des règles ou des attributs d’exclusion par référentiel (en fournissant un <template‑dir>/info/exclude ou <template‑dir/info/attributes> fichier).

Tout fichier de configuration résidant dans un .git Le répertoire peut être placé dans un modèle pour servir de copie initiale de ce fichier dans les nouveaux référentiels initialisés à partir du modèle. Je suppose que vous pourriez même fournir les objets initiaux et les références.

Une fois que vous avez créé un répertoire de modèles avec vos personnalisations, vous devez en informer git init et git clone où le trouver Ceci peut être fait explicitement avec le --template option (Git 0.99.4 ou ultérieure), ou implicitement avec le GIT_TEMPLATE_DIR variable d’environnement (Git 1.5.0 ou ultérieure), ou implicitement en définissant la init.templatedir variable de configuration dans les fichiers de configuration Git «globaux» (par utilisateur) ou «système» (c'est-à-dire ~/.gitconfig ou /etc/gitconfig (varie selon l'installation); Git 1.7.1 ou version ultérieure).

Chris Johnsen
la source
Merci de votre réponse, mais ce n’est pas ce que je cherchais: je veux suivre tous les dépôts, j’ai ajouté une ligne concernant mon intention à la question.
tig
0

Vous ne pouvez pas "suivre" les dépôts git (comme dans "demander à un référentiel central la liste des dépôts git actuellement actifs).
Chaque dépôt git est indépendant d’un autre.

Deux solutions pourraient être envisagées:

  • un modèle git comme dans la réponse de Chris, avec l'un des crochets côté client lors de la première utilisation, d’enregistrer le repo git dans un fichier "central".
    Ce fichier serait alors lu par un script externe (externe à git), afin de rendre le fichier pertinent git status ou git gc que tu veux.

  • si tous vos dépôts git sont déclarés dans le même répertoire commun, vous pouvez déclarer un dépôt git parent global et ajouter tous les sous-dépôts comme sous-modules .
    Puisque git1.7.0 , git status sait quand un sous-module contient des modifications non validées.

VonC
la source
Note: sur git submodules, il y a une introduction assez complète à ce sujet: longair.net/blog/2010/06/02/git-submodules-explained
VonC