Lorsque vous utilisez Git, est-il conseillé d'utiliser la branche master pour un développement actif?

32

Tout d'abord, un peu de contexte, nous sommes en train de déplacer toutes nos équipes de projet vers l'utilisation de git et nous sommes en train de définir les directives sur la façon dont les référentiels doivent être organisés afin que certaines succursales puissent également être surveillées pour une intégration continue et déploiement automatique sur les serveurs de test. Actuellement, deux modèles se développent:

  1. Fortement influencé par l' article de nvie.com sur la réussite des branchements, la branche principale représentant le code le plus stable, une branche de développement pour le code de pointe et une branche d'intégration pour le code qui est prête pour les tests d'assurance qualité.

  2. Un autre modèle dans lequel la branche principale représente le code de développement de pointe, une branche d'intégration pour le code qui est prêt pour les tests d'assurance qualité et une branche de production pour le code stable qui est prêt pour le déploiement.

À ce stade, il s'agit en partie d'une question de sémantique quant à ce que représente la branche principale, mais est-ce que le développement actif sur la branche principale est une bonne pratique ou n'est-ce pas vraiment pertinent?

rjzii
la source
1
J'aime le worfklow que Scott Chacon utilise pour développer GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764
1
Comme décrit, il me semble qu'il s'agit davantage d'un problème sémantique qu'improbable - toute organisation va faire évoluer ses propres processus et, à certains égards, les noms doivent refléter votre flux de travail. De manière générale, la clé semble être que quelque part vous définissez quelque chose de telle que "le code source de HEAD reflète toujours un état prêt pour la production". Ce que vous choisissez d'appeler est moins important, mais à la fois git-flow et le workflow GitHub se concentrent sur cette séparation et sur le contrôle lorsque vous passez au "machin" prêt à la production
Murph
@Murph - Certes, mais comme nous faisons cela à partir de zéro, j'ai pensé qu'il serait préférable de suivre plus ou moins les conventions courantes afin que les nouveaux développeurs embauchés n'aient pas une courbe d'apprentissage abrupte en raison de pratiques internes inhabituelles.
rjzii
Ensuite, vous avez répondu à votre propre question (-: Pour être honnête, même en posant la question, vous êtes bien en avance sur la courbe ...
Murph

Réponses:

33

La seule véritable caractéristique qui définit la masterbranche est qu'elle est la valeur par défaut pour certaines opérations. De plus, les noms de branche n'ont de signification que dans un référentiel spécifique. Mon masterpourrait pointer vers votre development, par exemple. De plus, une masterbranche n'est même pas requise, donc s'il y a une confusion quant à la branche à laquelle elle devrait appartenir, mon conseil est généralement de la laisser de côté.

Cependant, à mon avis, la meilleure façon d'y penser est comme valeur par défaut pour pousser. La plupart des didacticiels en ligne que vos développeurs lisent supposeront cela. Donc, il est très logique d’ masterêtre la branche dans laquelle on pousse le plus souvent. Certaines personnes le considèrent comme la copie vierge qui est intouchable pour les développeurs, sauf après un examen minutieux, mais l'utiliser de cette façon supprime une grande partie des valeurs par défaut utiles fournies par git. Si vous voulez ce genre de branche vierge, je le mettrais dans un référentiel complètement séparé que seules certaines personnes peuvent écrire.

Karl Bielefeldt
la source
7
+1. Et parce que le code "prêt pour la production" est le code important, il devrait également vivre dans une branche avec un nom soulignant cette importance. "master" comme nom de branche par défaut ne satisfait sûrement pas cette demande, car il est également utilisé dans tous les autres dépôts pour toutes les intentions.
Bananeweizen
4
+1. Ceci est la vraie réponse. Pour souligner ce point: personne dans votre équipe n'a défini la branche "master", le système git l'a fait. Pour tout ce qui est important, respectez les branches définies par un membre de votre équipe.
Travis Wilson
1
Complètement d'accord. Bien que j'aime beaucoup le modèle git flow ( nvie.com/posts/a-successful-git-branching-model ), la seule chose qui me dérange, c'est que master est strictement réservé aux versions, ce qui est contre-intuitif.
Bachi
12

Non, ce n'est pas conseillé, même au début avant de passer au contrôle qualité. En tant que meilleure pratique, le modèle de développement doit être cohérent du début à la fin. Votre branche principale doit commencer vide, vous devez débrancher votre branche de développement et commencer à ajouter des fichiers, fusionner dans votre branche d'intégration, puis par la suite à votre maître.

Bien que personne ne se soucie du développement que la branche principale ne construit pas, elle se prête très tôt aux mauvaises habitudes. Le maître doit toujours construire, et pour les versions majeures des fonctionnalités, ce ne serait pas une mauvaise idée d'avoir des branches archivées des versions majeures afin que les points de version stables puissent être retournés si nécessaire.

Joel Etherton
la source
3
N'est-il pas préférable de faire un suivi de version via des balises?
Adonis K. Kakoulidis
1
@AdonisK .: Je ne vois pas la pertinence de votre question.
Joel Etherton