Quels sont les avantages d’utiliser Branching en tant que développeur solo?

117

Tout d'abord, je suis conscient du fait que de nombreuses questions ont été posées à propos de VCS en tant que développeur solo, mais elles sont souvent trop larges. Cela ne concerne que les branches, et cela a toujours été marqué comme un doublon ... le supposé doublon est, là encore, marqué comme un autre doublon d'une autre question trop large qui ne concerne pas spécifiquement les branches. C'est comme ça que ma question est unique.

Quels sont les avantages, le cas échéant, d’utiliser Branching en tant que développeur solo? Je l'ai souvent vu recommandé même dans un contexte de développeur solo, mais pour autant que je sache, au-delà de l'utilisation d'une trompe «principale» pour le développement et de la création de code pour travailler, du code prêt pour la publication, je ne vois pas comment Je pouvais exploiter le pouvoir des branches (par exemple, compartimenter de nouvelles fonctionnalités) sans trop compliquer le processus de développement.

flatterino
la source
14
Je suis désolé, je reconnais que je n’ai pas beaucoup d’expérience dans le modèle StackExchange, mais dois-je comprendre que les «meilleures pratiques», ou toute autre question qui n’a pas une seule réponse déterministe, sont mal vues, voire même pas autorisé à être discuté? Je vois beaucoup d'exemples d'opinions de questions supposées être valables, même dans la section "connexe" de cette question, telles que softwareengineering.stackexchange.com/questions/286928 ou softwareengineering.stackexchange.com/questions/132730
flatterino
8
Bien que je sois d’accord avec Man que cette question n’est pas une duplication exacte (les différences d’envergure sont importantes), la dupe de la question de dupe ciblée par gnat liée a des réponses qui couvrent le sujet qui vous intéresse. les réponses ne couvraient pas ce que vous voulez en savoir plus?
Juin
4
Je pensais que bien que la question couvre ce sujet, elle le fait de manière tangentielle (l'utilisateur pose 3 questions différentes liées à différents aspects de la création de branches), et la question elle-même a été fermée pour avoir été "trop ​​large" pour cette raison même. J'espérais entamer une discussion sur cette caractéristique très spécifique de VCS dans ce contexte spécifique similaire. Pour répondre à votre question, jusqu'à présent, plusieurs aspects de celle-ci ont été mentionnés ici (dans les réponses et les commentaires relatifs à ces réponses) qui ne sont pas mentionnés dans les réponses à la question que vous avez mentionnée. Merci à tous pour vos contributions.
Flatterino
3
Dan, encore une fois ... la question que vous avez liée demande: "En tant que développeur unique, quelles fonctionnalités Git ou GitHub puis-je utiliser pour en tirer avantage pour moi maintenant?". Une réponse possible à cette question, parmi d’autres, pourrait être «ramification». Ce ne serait pas une réponse à ma question. En outre, il était fermé car trop large pour la même raison. S'il vous plaît lire l'explication sur le dessus de ma question. J'ai eu à modifier mon message 3 fois maintenant ...
flatterino

Réponses:

199

Les avantages sont généralement les mêmes que pour les groupes de développeurs. En utilisant une branche principale toujours prête à être lancée et des branches permettant de développer de nouvelles fonctionnalités, vous pouvez toujours libérer le maître. Trouver un bug important en travaillant sur une fonctionnalité? Changez de branche, corrigez, relâchez, revenez en arrière et poursuivez le développement.

Ou peut-être s'agit-il d'un projet de loisir et vous aimez simplement pouvoir travailler un peu sur cette fonctionnalité et un peu de cela, selon l'humeur qui vous frappe. En gros, vous imitez une équipe composée de plusieurs personnes en découpant votre temps.

Le branchement implicite que font les DVCS sur les clones signifie que les branches formelles du référentiel faisant autorité sont moins axées sur la coordination des personnes et davantage sur la coordination des orientations de développement, et même une seule personne peut en effectuer plusieurs.

Sebastian Redl
la source
1
Exactement. Les groupes ne doivent pas non plus utiliser de branches - j'ai travaillé pour des équipes qui n'en avaient pas. Certes, cela provenait principalement de la méconnaissance de git, et toutes ces équipes ont appris à utiliser les branches lorsque des problèmes de non-utilisation sont apparus, mais ces problèmes s’appliqueraient également à un développeur solo.
Kryan
42

Développement à long terme

La création de branches pour une seule personne serait utile pour une fonction de développement longue qui ne correspondrait pas à votre cycle de publication.

Vous pouvez prendre une branche pour votre changement couvrant plusieurs mois tout en conservant la possibilité d'insérer les corrections de bugs quotidiennes ou les modifications apportées à votre branche principale à intervalles réguliers.

Cela présente l'avantage sur les "commutateurs" d'une seule branche en ce sens que votre branche principale est toujours dans un état déployable et qu'il est garanti qu'aucun élément de la longue fonctionnalité n'a eu d'impact sur du code précédemment testé.

Caractéristiques expérimentales

Une branche peut également être utile pour les fonctionnalités que vous souhaitez peut-être créer en prototype, mais qui ne pourront jamais en faire partie dans votre code déployé. Le fait de les terminer sur une branche qui sera finalement jetée signifie que vous ne polluez jamais inutilement votre base de code principale.

Paddy
la source
16

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

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

  1. Rendre la branche maîtresse réalisable. Faites le commit initial.

  2. Commander développer la branche. Ne faites rien, développez des fonctions en tant que tampon de test pour la fusion en maître.

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

Lorsque suffisamment de problèmes sont fusionnés en développement pour une version et que développement a été testé pour la stabilité, tirez développez en maître.

   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 faire mal à Maître et à avoir à annuler les commits s’ils étaient dangereux.

En outre, en utilisant des branches individuelles pour commettre, vous pouvez "laisser" le travail que vous avez déjà fait, recommencer à zéro pour autre chose afin de résoudre un problème plus urgent et le diffuser plus tôt.

Dans la vie réelle, j'ai généralement une branche de problème et je tire celle-ci en développement, puis en maître. Parfois, c'est fastidieux, mais au moins tous les deux mois, je dois abandonner le travail du jour au lendemain, parce que quelqu'un a eu l'idée que je devais créer RightNow ™ et que, de cette manière, je pourrais rapidement revenir à un état de base. et ensuite continuer là où j'étais. Surtout avec les grands projets qui prennent plusieurs semaines, c’est un don 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 œuvres qui laisse votre branche principale en chirurgie cardiaque ouverte et une YugeBug ™ apparaît qui a besoin de fixer d' urgence sinon des milliers d'utilisateurs se plaignent de vous au sujet BigProblems ™
La seul moyen de résoudre rapidement votre problème dans un tel scénario,

  1. vérifiez vos commits précédents,
  2. voir quand était votre dernier commit stable (la malédiction est optionnelle)
  3. revenir à ce commit
  4. faire correctif, pousser correctif à la production
  5. Résolvez tous les conflits et problèmes que vous rencontrez maintenant pour revenir au statut AwesomeCodeThing ™
  6. abandonner, pleurer et recommencer à travailler (facultatif)

Si vous utilisez des branches:

  1. Maître de caisse
  2. créer une branche UrgentFix ™ et résoudre des problèmes
  3. tirer UrgentFix ™ dans le maître
  4. pousser à la production
  5. Fusionner le maître pour développer
  6. Fusionnez dans AwesomeCodeThing ™
  7. prendre une bière et continuer à travailler.
Tschallacka
la source
13
Obtenir une bière avant de continuer est non facultatif.
JamesB
4
@JamesB Obtenir une bière avant de commencer est non facultatif :)
Chris Cirefice
4

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 tester la progression de chaque fonctionnalité séparément. Peut-être que vous venez de lire un article sur un exploit nul et que vous voulez en parler avant que le 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 développeur unique ou membre d'une équipe.

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

Andrew Calder
la source
2

Comme mentionné par d'autres affiches, les avantages sont sensiblement similaires à ceux du travail en équipe: possibilité de développer et de tester de manière autonome des fonctionnalités, de gérer une branche principale distincte pour les correctifs / déploiements de production, d'expérimenter.

Pour ma part, j’ai généralement tendance à travailler en maître si je connais très bien le domaine sur lequel je travaille, cela ne fait qu’ajouter des frais généraux à une branche, car je vais simplement les fusionner de toute façon.

Toutefois, si j’ai une quelconque hésitation à propos des modifications que je suis en train de faire, je créerai une branche et seul le rapport PR / fusion une fois que la branche se comportera comme prévu et sera généralement entièrement testé. Ainsi, si je découvre un problème pour lequel la restauration est la meilleure solution, il s’agit d’un simple commit au lieu d’une série entière (je ne me souviens jamais de la syntaxe pour annuler une série d’engagements, mais un seul est facile).

RmxPatrick
la source