Voici mon hook actuel dans un dépôt nu qui vit sur le serveur de l'entreprise:
git push origin master
Ce hook pousse à Assembla. Ce dont j'ai besoin, c'est de ne pousser qu'une seule branche (maître, idéalement) lorsque quelqu'un pousse des modifications à cette branche sur notre serveur et d'ignorer les poussées vers d'autres branches. Est-il possible de sélectionner la branche à partir d'un dépôt nu et de ne pousser que cette branche vers Assembla?
git
repository
hook
git-bare
Jorge Guberte
la source
la source
git push origin master
ne poussera que lamaster
branche vers laorigin
télécommande, qui, je suppose, est définie comme étant Assembla. Êtes-vous en train de dire que vous devez déclencher le crochet uniquement lorsque quelqu'un poussemaster
, par opposition àfeature1
ou quelque chose du genre?Réponses:
Un hook post-réception obtient ses arguments de stdin, sous la forme
<oldrev> <newrev> <refname>
. Étant donné que ces arguments proviennent de stdin et non d'un argument de ligne de commande, vous devez utiliser à laread
place de$1 $2 $3
.Le hook post-receive peut recevoir plusieurs branches à la fois (par exemple si quelqu'un fait a
git push --all
), nous devons donc également l'envelopperread
dans unewhile
boucle.Un extrait de code fonctionnel ressemble à ceci:
la source
#!/bin/sh
place de#!/bin/bash
?refs/heads/master
place derefs/tags/master
vous, ça devrait aller. Il peut y avoir d'autres cas extrêmes comme celui-ci auxquels je ne pense pas. Cela pourrait être une bonne question StackOverflow à part entière.if branch=$(git rev-parse --symbolic --abbrev-ref $refname 2>/dev/null); then
pour que git ne se plaint pas lorsque je supprime une branche.Le dernier paramètre qu'un hook de post-réception obtient sur stdin est ce que ref a été changé, nous pouvons donc l'utiliser pour vérifier si cette valeur était "refs / heads / master". Un peu de rubis similaire à ce que j'utilise dans un hook post-réception:
Notez qu'il obtient une ligne pour chaque ref qui a été poussé, donc si vous avez poussé plus que juste master, cela fonctionnera toujours.
la source
La réponse de Stefan n'a pas fonctionné pour moi, mais cela a fonctionné:
la source
Aucune des solutions ci-dessus n'a fonctionné pour moi. Après beaucoup, beaucoup de débogage, il s'avère que l'utilisation de la commande 'read' ne fonctionne pas - à la place, l'analyse des arguments de ligne de commande de la manière habituelle fonctionne bien.
Voici le hook post-update exact que je viens de tester avec succès maintenant sur CentOS 6.3.
UPDATE: sur une note encore plus étrange, le hook de pré-réception prend son entrée via stdin, donc lu avec 'read' (wow, je n'aurais jamais pensé que je dirais ça). Le hook post-update fonctionne toujours avec 1 $ pour moi.
la source
post-receive
hameçons, pas auxpost-update
hameçons. Ils prennent leur contribution de différentes manières.post-receive
prend stdin comme indiqué ici: git-scm.com/book/en/v2/Customizing-Git-Git-HooksLa réponse de @pauljz fonctionne bien pour certains hooks git comme
pre-push
, maispre-commit
n'a pas accès à ces variablesoldrev newrev refname
J'ai donc créé cette version alternative qui fonctionne pour le pré-commit, ou vraiment et hook. C'est un
pre-commit
hook qui exécutera unhusky
script si nous ne sommes PAS sur lamaster
branche.J'espère que cela aide quelqu'un. Vous pouvez facilement modifier selon vos besoins tout ce qui se trouve entre les instructions
if
etfi
.la source
J'avais écrit un script PHP pour moi-même pour faire cette fonctionnalité.
https://github.com/fotuzlab/githubdump-php
Hébergez ce fichier sur votre serveur, de préférence repo root et définissez l'url dans les webhooks github. Changez 'allcommits' à la ligne 8 avec le nom de votre succursale et ajoutez votre code / fonction à la ligne 18.
par exemple
la source
Approche simple, par
git hook
écritSimple - plus d'informations sur ce grand système d'accrochage de lien
la source