web-dev-qa-db-fra.com

Quels sont les avantages de l'utilisation de branchement en tant que développeur solo?

Tout d'abord, je suis conscient que de nombreuses questions ont été posées sur VCS en tant que développeur solo, mais elles sont souvent trop larges. Cela ne concerne que les branchements, et il a toujours été marqué comme doublon ... le doublon supposé est, encore une fois, marqué comme un autre doublon d'une autre question qui est trop large et ne concerne pas spécifiquement la ramification. C'est ainsi que ma question est unique.

Quels sont les avantages, le cas échéant, de l'utilisation de branchement en tant que développeur solo? Je l'ai souvent vu recommandé même dans un contexte de développement solo, mais pour autant que je puisse voir, au-delà de l'utilisation d'un tronc `` maître '' pour le développement et de la dérivation pour le travail, du code prêt pour la sortie, je ne vois pas comment Je pouvais exploiter la puissance de la ramification (par exemple, pour compartimenter de nouvelles fonctionnalités) sans trop compliquer tout le processus de développement.

118
flatterino

Les avantages sont généralement les mêmes que pour les groupes de développeurs. En utilisant une branche principale toujours prête à publier et des branches de fonctionnalités pour développer de nouvelles fonctionnalités, vous pouvez toujours libérer le master. Vous trouvez un bug important lorsque vous travaillez sur une fonctionnalité? Changez de branche, réparez, relâchez, revenez en arrière et poursuivez le développement.

Ou peut-être que c'est un projet de loisir et que vous aimez juste pouvoir travailler un peu sur cette fonctionnalité et un peu de cela, au gré de l'humeur. Vous émulez essentiellement une équipe de plusieurs personnes en découpant le temps.

La branche implicite que les DVCS font sur les clones signifie que les branches formelles sur le référentiel faisant autorité sont moins sur la coordination des personnes et plus sur la coordination des directions de développement, et même une seule personne peut en faire plusieurs.

197
Sebastian Redl

Développement à long terme

La création d'une branche pour une seule équipe serait utile pour une fonctionnalité de développement de longue durée qui, autrement, ne rentrerait pas dans votre cycle de publication.

Vous pouvez prendre une branche pour votre changement s'étalant sur plusieurs mois et toujours être en mesure de pousser les corrections de bugs ou les changements quotidiens de votre branche principale à intervalles réguliers.

Cela a l'avantage sur les `` commutateurs '' dans une seule branche en ce que votre branche principale est toujours dans un état déployable et vous êtes assuré que rien dans la fonctionnalité de longue durée n'a eu d'impact sur d'autres codes précédemment testés.

Caractéristiques expérimentales

Une branche peut également être utile pour les fonctionnalités que vous souhaitez peut-être créer, mais qui peuvent ne jamais figurer dans votre code déployé. En les complétant sur une branche qui peut finalement être jetée, vous ne polluerez jamais inutilement votre base de code principale.

42
Paddy

Je l'utilise pour la maintenance critique de sites Web. Je suis le seul développeur mais j'ai un master, je développe et j'émets des branches.

Mon processus de travail pour la configuration du site ressemble à ceci:

  1. Rendre une branche principale exploitable. Effectuez la validation initiale.

  2. Commander développer la branche. Ne faites rien, développez des fonctions de tampon de test pour fusionner en master.

  3. Branche de problème de paiement. Codez votre problème, une fois terminé, tirez-le vers le développement, voyez si des problèmes surviennent, fusionnez les conflits, etc. corrigez-les.

Lorsque suffisamment de problèmes sont fusionnés dans develop pour une version et develop a été testé pour la stabilité, tirez develop vers master.

   Master
     |
   Develop  - E
   / |  \  \
 A   B   C  D

De cette façon, vous obtenez une collection complète de tests en développement, où vous pouvez tester la stabilité, les problèmes, etc. sans avoir à risquer de blesser Master et à annuler les validations si elles étaient nuisibles.

De plus, en utilisant des branches individuelles pour vous engager, vous pouvez "laisser" le travail que vous avez déjà fait, recommencer à zéro pour résoudre un problème plus urgent et le déployer plus tôt.

Dans la vraie vie, j'ai généralement une branche de problème, et je tire celle-ci en développement puis en master. Parfois, c'est fastidieux, mais une fois tous les deux mois au moins, je dois abandonner le travail à la baisse d'un chapeau parce que quelqu'un a eu une idée que je dois faire RightNow ™ et de cette façon je peux rapidement revenir à un état de base, faire la chose et ensuite continuer où j'étais. Surtout avec les grands projets qui prennent plusieurs semaines, c'est une aubaine que je peux rapidement changer de branche.

Considérez ce scénario: vous travaillez toujours sur une branche principale et vous avez AwesomeCodeThing ™ dans les travaux qui laisse votre branche principale en chirurgie à cœur ouvert et un YugeBug ™ apparaît qui nécessite une correction urgente sinon des milliers d'utilisateurs se plaindront de BigProblems ™
La seule façon de résoudre rapidement votre problème dans un tel scénario,

  1. vérifiez vos validations précédentes,
  2. voir quand était votre dernier commit stable (le maudit est facultatif)
  3. revenir à ce commit
  4. faire le correctif, pousser le correctif vers la production
  5. résoudre tous les conflits et problèmes que vous rencontrez actuellement pour revenir au statut AwesomeCodeThing ™
  6. abandonner, pleurer et recommencer. (facultatif)

Si vous utilisez des succursales:

  1. Maître de caisse
  2. créer une branche UrgentFix ™ et corriger des choses
  3. tirer UrgentFix ™ en maître
  4. Pousser à la production
  5. Fusionner le maître pour développer
  6. Fusionner le développement en AwesomeCodeThing ™
  7. prendre une bière et continuer à travailler.
16
Tschallacka

Les branches facilitent le travail sur plusieurs fonctionnalités à la fois, ce qui peut être très utile lorsque les priorités changent au cours d'un projet.

Supposons que vous décidiez qu'une fonctionnalité est plus importante maintenant. Peut-être avez-vous un besoin urgent de corriger un bogue critique dans un système en direct. Vous pouvez travailler avec un client sur plusieurs fonctionnalités sur une longue période et souhaiter démontrer la progression de chaque fonctionnalité séparément. Peut-être que vous venez de lire un mauvais exploit de zero day et que vous souhaitez y accéder avant que ledit client ne le lise.

Si vous utilisez des branches pour chaque fonctionnalité/correctif, il sera généralement plus facile, plus propre et plus rapide d'isoler et de déployer ces modifications plutôt que d'utiliser une seule branche pour tout. Cela est vrai que vous soyez un développeur unique ou que vous fassiez partie d'une équipe.

En ce qui concerne un processus réel, je trouve que git flow fonctionne bien. Daniel Kummer feuille de triche git flow est une excellente ressource, elle vaut la peine d'être consultée même si vous n'utilisez pas git.

4
Andrew Calder

Comme mentionné par d'autres affiches, les avantages sont sensiblement similaires à ceux du travail en équipe: la capacité de développer et de tester indépendamment des fonctionnalités, de maintenir une branche principale distincte pour les correctifs/déploiements de production, d'expérimenter.

Pour moi personnellement, j'ai généralement tendance à travailler en master si je connais très bien le domaine sur lequel je travaille, cela ajoute simplement des frais généraux à la branche car je vais juste les fusionner de toute façon.

Cependant, si j'ai n'importe quel hésitation au sujet des changements que j'apporte, je vais créer une branche et seulement PR/fusionner une fois que la branche se comportera comme prévu et est généralement entièrement testée. De cette façon, si je découvre un problème pour lequel le retour en arrière est le meilleur plan d'action, c'est un seul commit au lieu d'une série entière (je ne me souviens jamais de la syntaxe pour annuler une série de commits mais un seul est facile).

2
RmxPatrick