Comment pourrais-je écrire un pré-fusion crochet dans Git?
La question en dit long. Est-il un moyen pour effectuer une action devant une fusion? Je devine qu'il y a un moyen de rendre l'utilisation d'un pre-commit
crochet, mais je ne suis pas tout à fait sûr.
- Même si cette question est de plus de 5 ans -- en attendant, toute solution pour cela? Par exemple, je veux que les gens à être en mesure de s'engager dans leur propre, privé branches ce qu'ils veulent, mais pas de les fusionner code avec de terribles métriques dans le fait de développer ou de branche master...
- Remarque: Git 2.24 (T4 2019) en fait ne comprennent une pré-fusion-commit crochet. Voir ma réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser le
prepare-commit-msg
crochet. Le deuxième argument seramerge
"si la validation est une fusion ou d'une.git/MERGE_MSG
le fichier existe déjà". Une valeur non nulle pour abandonner le commettre.Je ne pense pas que cela va fonctionner avec une avance rapide de fusion, car il n'y aura pas un message de commit.
Plus d'infos sur les crochets: https://www.kernel.org/pub/software/scm/git/docs/githooks.html#_prepare_commit_msg
exit 1
en haut de préparer de validation-msg et d'effectuer une fusion de commettre.printf -- '%s\n%s\n' '#!/bin/sh' 'echo nope && exit 1' > prepare-commit-msg
Avec Git 2.24 (T4 2019), pas besoin de script, ou de préparer le message de crochet.
Un nouveau "pré-fusion-comitét" crochet a été introduit.
Voir s'engager bc40ce4, s'engager 6098817, s'engager a1f3dd7 (07 Août 2019) par Michael J Gruber (
mjg
).Voir s'engager f78f6c7 (07 Août 2019) par Josh Steadmon (
steadmon
).(Fusionnés par Junio C Hamano --
gitster
-- dans s'engager f76bd8c, 18 septembre 2019)La la documentation comprend maintenant:
Une autre bonne solution serait d'ajouter un script shell, appelez ça comme vous voulez,
puis ajouter ces lignes dans le script:
Puis faire un
Alors vous êtes bon pour aller. Vous venez d'ajouter votre propre pré-fusion crochet.
Je sais, que vous n'avez pas accès à ce que les arguments de git passer pour un véritable pré-fusion crochet, mais vous pouvez préparer des fichiers ou ce que vous voulez pour se préparer pour la fusion maintenant; personnellement, je suis très heureux avec cette approche: j'ai passé 2 ou 3 jours pour trouver quelque chose de pré-fusion, puis j'ai dû aller avec le pre-commit-msg que je n'ai pas trouver la précision est suffisante pour mes besoins. Cela résout tous mes problèmes. Espérons que cela aide quelqu'un dans le futur.
merge
n'est pas toujours le premier argument degit
: pensez à quelque chose commegit -c foo=bar merge foobar
.merge
? Que faire si quelqu'un se confond avecgit pull
au lieu degit merge
, ou même avec un git script? Votre script doit comprendre git pour déterminer si l'utilisateur est en train de fusionner.