2010-01-12 3 views
25

Nous utilisons des crochets Git personnalisés dans notre projet.Git hooks management

Les hameçons sont stockés dans le référentiel d'un projet et, lorsqu'ils sont modifiés, pour obtenir une nouvelle version, chaque utilisateur doit les copier manuellement dans son répertoire .git/hooks. C'est plutôt gênant. Une manière d'améliorer ceci est de faire de .git/hooks un lien symbolique dans worktree. Mais cela impliquerait que chaque branche (même les branches d'entités locales de l'utilisateur en cours de développement) devrait avoir la version la plus récente des hooks. Ce n'est pas pratique aussi bien.

Comment pourriez-vous résoudre le problème?

Répondre

12

Conservez un référentiel séparé de vos hooks et liens symboliques dans celui-ci. Je suis d'accord, ce serait bien si Git avait un mécanisme intégré pour propager des scripts de hooks mais ce n'est pas le cas.

+1

C'est une option, bien sûr, mais c'est un dépôt de plus à mettre à jour le matin ... Pour chaque développeur. Je suppose que j'ai besoin de plus d'automatisation ... –

0

Nous avons fait .git/hooks un lien symbolique dans l'arbre de travail.

Pour les rares occasions où quelqu'un a besoin de valider les fichiers que les crochets rejetteront, nous utilisons git commit --no-verify

+0

Que git commit --no-verify est dangereux. Il est difficile de rebaser lorsque vous avez de mauvais commits. –

+1

@Alexander, git rebase prendra aussi un drapeau --no-verify. –

+0

Merci, j'ai raté ça. Encore ... un hack. :-) –

2

Vous pouvez faire un répertoire .git dépôt git, et il suffit d'ajouter des crochets et autres config du référentiel pour elle, en ajoutant le objects, refs, etc. répertoires et fichiers comme index à son .gitignore. Non seulement cela, mais vous pouvez configurer un hook post-réception pour mettre à jour le metarepo depuis son origine. Une fois que la configuration initiale a été configurée, vous pouvez l'insérer dans les mises à jour sans effort supplémentaire. Je travaille sur les détails de ceci, comme ce qui devrait aller dans la liste des ignorés; Je garde les résultats dans les branches de this repo.

1

Pour les projets basés NodeJS, je vous suggère de jeter un oeil à ghooks.