51 votes

Existe-t-il un moyen de configurer le référentiel git pour qu'il rejette 'git push -force'?

Je me demandais s'il y avait un moyen d'empêcher ' git push --force ' sur un référentiel (uniquement sur la branche principale)?

Supposons que j'ai un référentiel git distant et que:

  • ' git push ' à 'maîtriser'. Ça marche.
  • ' git push --force ' à 'branche-1'. Ça marche.
  • ' git push --force ' à 'maîtriser'. C'est rejeté.

Est-ce même possible?

Merci pour toutes les réponses et suggestions.

BR, Dawid.

52voto

Charles Bailey Points 244082

Réglage de la configuration des variables:

receive.denyNonFastForwards
receive.denyDeletes

permettra d'éviter toute "forcé" pousse de travail dans toutes les branches.

Si vous voulez plus fine de pré-direction de la commande, vous devrez utiliser un "hook" sur le dépôt distant, probablement la "mise à jour" crochet.

Il est un exemple de mise à jour de crochet appelé "mise à jour de paranoïa" qui n'est probablement ce qu'il vous faut (et plus) dans le git de la distribution dans le "contrib" dossier.

gitweb lien

3voto

Thomas Koch Points 1034

J'ai écrit ce crochet de mise à jour rapide pour empêcher les mises à jour non anticipées (push) sur la branche "dev" dans un référentiel:

 #!/bin/sh

REFNAME=$1
OLDSHA=$2
NEWSHA=$3

if [ "refs/heads/dev" != $REFNAME ]; then
  exit 0
fi

MERGEBASE=$(git merge-base $OLDSHA $NEWSHA)
if [ $OLDSHA = $MERGEBASE ]; then
  exit 0
fi

echo "Not a fast-forward on branch dev"
exit 1
 

2voto

VonC Points 414372

Peut-être grâce à cette configuration:

 receive.denyNonFastForwards

Si défini à true, git-receive-pack refusera réf mise à jour qui n'est pas un fast-forward.
Utilisez cette option pour empêcher une telle mise à jour via un push, même si le push est forcé.
Cette variable de configuration est défini lors de l'initialisation d'un référentiel partagé.

Mais ce serait pour toutes les branches, pas seulement des maîtres... Un crochet peut être en mesure de vous donner un meilleur contrôle sur cette configuration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X