Y a-t-il un moyen de verrouiller une branche en GIT

j'ai une idée de verrouiller un dépôt depuis les utilisateurs qui y enfoncent des fichiers en ayant un script de verrouillage dans le crochet de mise à jour GIT puisque le push ne peut reconnaître que l'userid comme argument et pas les branches. Donc je peux verrouiller toute la banque qui ne fait que verrouiller un répertoire.

Existe-t-il un moyen de verrouiller une branche spécifique dans GIT?

ou y a-t-il un moyen pour Qu'un crochet de mise à jour puisse identifier de quelle branche l'utilisateur pousse et à quelle branche le code est poussé?

38
demandé sur Senthil A Kumar 2010-03-18 19:02:43

3 réponses

la branche vers laquelle on pousse est le premier paramètre à mise à jour de crochet. Si vous voulez verrouiller la branche myfeature pour pousser, le présent code (placé dans hooks/update) de le faire:

#!/bin/sh
# lock the myfeature branch for pushing
refname=""

if [[ $refname == "refs/heads/myfeature" ]]
then
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "You cannot push to myfeature! It's locked"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    exit 1
fi
exit 0
36
répondu eckes 2011-07-26 08:06:49

La mise à jour du crochet, de la documentation:

Le crochet s'exécute une fois pour chaque ref être mis à jour, et prend trois paramètres:

  • le nom de l'arbitre en cours de mise à jour,
  • l'ancien nom de l'objet stocké dans le ref,
  • et le nouveau objectname à stocker dans la réf.

... oui, il sait exactement quelle branche est poussée, et peut simplement vérifier ce paramètre et l'échec de sortie si elle il ne veut pas que la branche soit poussée.

Et si vous le souhaitez (intelligemment) faire avant l'utilisateur a téléchargé les objets, vous pouvez utiliser le pré-recevoir crochet:

Ce crochet s'exécute une fois pour l'opération. Il ne prend pas d'arguments, mais pour chaque ref à mettre à jour il reçoit en entrée standard une ligne du format:

<old-value> SP <new-value> SP <ref-name> LF

<old-value> est l'ancien nom de l'objet stocké dans le ref, <new-value> est le nouveau nom de l'objet à être stockés dans le ref et <ref-name> est le nom complet de la réf.

(ceux sont les espaces et les saut de ligne)

8
répondu Cascabel 2014-02-27 16:59:36

Un outil comme gitolite a ce genre de fonctionnalité que je crois: http://github.com/sitaramc/gitolite

7
répondu amx 2010-03-18 16:24:34