2010-12-10 31 views
13

Je voudrais forcer les autres membres de l'équipe à ne pas travailler sur la branche principale mais sur une branche de développement. nous avons un référentiel central dans lequel nous poussons notre travail. Je voudrais savoir s'il est possible d'empêcher les utilisateurs d'apporter des modifications à la branche maîtresse, mais seulement autoriser certains utilisateurs à le faire.git-locking branche principale pour certains utilisateurs?

Je voudrais avoir les éléments suivants « workflow »

    développement
  • est toujours fait seulement avec une branche de développement
  • la libération gestionnaire est responsable de la branche principale et seulement il est autorisé à fusionner stuff d'une branche de développement dans le maître et le pousser à la branche principale sur le référentiel central.

Est-ce possible et comment puis-je y parvenir?

+0

Le contrôle d'accès est sous-traité de git au système d'exploitation exécutant le serveur. Si vous utilisez votre propre serveur, je vous recommande d'installer la gitose: http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way – blueberryfields

+0

merci, Je vais jeter un oeil à la gitose ... – aurora

+0

Je pensais que c'est exactement parce que 'git' est distribué, vous n'avez pas besoin de contrôler les permissions car il n'existe pas de référentiel 'partagé'? En d'autres termes, tout membre de l'équipe travaillant sur le projet travaillera sur sa propre copie du référentiel, et c'est le mainteneur qui fusionne les branches dans un référentiel «maître» (juste un nom, à ne pas confondre avec la branche maître). – amn

Répondre

6

Voir man githooks: Dans le référentiel partagé, vous pouvez créer un script $(git rev-parse --git-dir)/hooks/pre-receive ou $(git rev-parse --git-dir)/hooks/update qui vérifie ce que vos utilisateurs tentent de transmettre à quelles références. Git est livré avec un crochet d'exemple update-paranoid appliquant des ACL par ref.

+0

merci ... les githooks semblent être très puissants. Je vais jeter un oeil à la gitose et les githooks – aurora

+0

Quelqu'un peut-il développer à ce sujet? J'ai regardé le crochet '[update-paranoid] (http://git.kernel.org/cgit/git/git.git/tree/contrib/hooks/update-paranoid?id=HEAD)', mais je suis Je ne suis pas sûr de comprendre à quoi ressemblerait l'ACL pour plusieurs utilisateurs. Est-il prévu qu'un utilisateur aurait plusieurs entrées pour les committers autorisés sous la forme: 'committer = John Doe <[email protected]>', et cela pourrait être utilisé pour N utilisateurs comme: ' committer = John Doe < [email protected]> committer = Utilisateur2 <[email protected]> committer = Utilisateur3 <[email protected]> ' ? – blong

+0

@ b.long: 'update-paranoid' attend un' users/$ {USER} .acl' dans le '/ vcs/acls.git' repo (not * this * repo) pour chaque connexion SSH; à l'intérieur de chacun, il peut y avoir autant de lignes 'committer =' que désiré. Mais vous voudrez probablement modifier ou réécrire le script pour votre propre usage. – ephemient

1

Mon approche de bas niveau consisterait simplement à laisser RM être le seul avec les clés SSH à pousser vers le référentiel que tout le monde utilise comme référence de base. De cette façon, personne d'autre que la RM ne peut pousser à maîtriser - et pourtant tout le monde peut travailler puisqu'ils ont leurs propres branches de développement local et que les développeurs peuvent partager entre eux les branches qu'ils aiment.

L'étape suivante consiste à faire un testeur de casserole de cuisine pour les choses qui iront dans le maître bientôt. Ce pot est normalement appelé next ou dev. L'idée est que plus l'impact d'une branche est important, plus elle est longue avant la fusion pour être maîtrisée. Cela donne au MR le plein contrôle sur les branches qui devraient être diplômées et donne encore à tout le monde un heads-up.

+0

merci. J'ai aussi pensé à ssh et ce serait très facile à configurer. mais je pensais qu'il devrait y avoir de "meilleures" façons ...? – aurora