2010-01-11 6 views
19

Y a-t-il un moyen de modifier la configuration du référentiel central pour interdire toute transmission à distance vers la branche maître (en utilisant git)? Il ne serait mis à jour via la fusion de branche par un propriétaire de la version.Interdire le téléversement à distance à la branche maître dans git

Il est possible de faire dans des répertoires pour enfants, mais malheureusement, il n'est pas toujours infaillible, facile à oublier de le faire sur une nouvelle machine - pas moyen de se protéger contre les poussées accidentelles. Les développeurs devraient être capables de tirer de n'importe quelle branche et de repousser vers n'importe quelle branche, à l'exception de master, que nous voulons voir en lecture seule. Est-il possible avec git? Ou nous essayons un mauvais flux de travail.

Mise à jour tl; dr: grâce à Charles Bailey, la réponse est la vérification des maîtres et en ajoutant la configuration suivante:

receive.denyCurrentBranch = true 
+1

J'ai fourni un exemple de script pour un problème similaire dans [Comment configurer les branches en lecture seule dans un "référentiel de développement" central?] (Http://stackoverflow.com/questions/14502164/how-to-configure- read-only-branches-in-a-central-development-repository) – Alberto

Répondre

13

Vous devriez jeter un oeil à l'échantillon update crochet appelé update-paranoid dans le répertoire contrib de la distribution git. Il vous permet de configurer des listes de contrôle d'accès par branche qui limitent les utilisateurs autorisés à pousser vers quelles branches. De cette façon, vous pouvez restreindre la mise à jour de master à seulement les propriétaires de versions.

Je ne suis pas tout à fait sûr de ce que vous entendez par "seulement mis à jour via la fusion de branches". Je suppose que votre référentiel central est vide, auquel cas les branches ne sont généralement mises à jour que par un push. Il n'y a pas de différence conceptuelle entre git entre pousser un commit qui est une fusion et un qui n'est pas si je ne suis pas sûr de ce que vos critères pour restreindre le type de mise à jour pour maître est destiné à être.

Dans le cas où vous est envoyé à un dépôt central non-nu et master est toujours vérifié branche, vous pouvez simplement définir la configuration variable de receive.denyCurrentBranch à true ou refuse.

+0

Cela devrait être fait localement (via la fusion), par opposition à la 'push 'distante que nous voulons interdire. Et non, ce n'est pas vide - 'master' est extrait et est une copie de travail pour ainsi dire. Merci, je vais jeter un oeil à la mise à jour paranoïaque, peut-être restreindre à une personne fera l'affaire. – kibitzer

+0

OK, je vais mordre. Pourquoi votre référentiel central n'est-il pas vide et quelle branche est généralement la branche extraite? –

+0

'master' est la branche extraite; nous pouvions créer un référentiel nu mais je ne vois pas de raison car l'idée était d'interdire la poussée directe vers le master; d'où cette question. nous pourrions créer un dépôt nu et en tirer si cela nous aiderait dans notre quête d'un maître en lecture seule :) – kibitzer

Questions connexes